home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / program / abc9605.zip / ABC9605.CDE next >
Text File  |  1996-04-29  |  1MB  |  1 lines

  1. Jeff S. Root                   ARABIC TO ROMAN NUMERALS       FidoNet QUIK_BAS Echo          02-22-96 (16:29)       QB, QBasic, PDS        78   2305     ROMANCE.BAS  ' ROMANCE.BAS * Arabic to Roman number translatorπ ' Copyright MCMXCV by Jeff S. Root, Minneapolis, MNπ ' FREEWARE * Unlimited use and distribution * QBASICπ π DEFINT A-Zπ π CLS : PRINTπ DOπ   Arabic$ = ""π   PRINT "Number: ";π   LOCATE , , 1, 12, 13   'Cursor onπ   DOπ     DO: k$ = INKEY$: LOOP WHILE LEN(k$) <> 1      'Get inputπ     IF k$ = CHR$(27) THEN Arabic$ = "": EXIT DO   'Escπ     IF k$ = CHR$(8) AND Arabic$ > "" THENπ       Arabic$ = LEFT$(Arabic$, LEN(Arabic$) - 1)  'Backspaceπ       PRINT CHR$(29); " "; CHR$(29);π     ELSEIF k$ > "/" AND k$ < ":" THEN             '0-9 are okπ       IF k$ = "0" AND Arabic$ = "" THEN k$ = ""   'No lead 0sπ       IF LEN(Arabic$) < 4 THENπ         Arabic$ = Arabic$ + k$: PRINT k$;      'Add characterπ       END IFπ     END IFπ   LOOP UNTIL k$ = CHR$(13)                     'Enterπ   LOCATE , 1, 0: PRINT TAB(13); : LOCATE , 1   'Cursor offπ   IF Arabic$ = "" THEN END                     'Exit ROMANCEπ π   a$ = "": b$ = "": c$ = "": d$ = ""π   n = LEN(Arabic$)π   SELECT CASE MID$(Arabic$, n, 1)π     CASE "1": a$ = "I"π     CASE "2": a$ = "II"π     CASE "3": a$ = "III"π     CASE "4": a$ = "IV"π     CASE "5": a$ = "V"π     CASE "6": a$ = "VI"π     CASE "7": a$ = "VII"π     CASE "8": a$ = "VIII"π     CASE "9": a$ = "IX"π   END SELECTπ   n = n - 1π   IF n THENπ     SELECT CASE MID$(Arabic$, n, 1)π       CASE "1": b$ = "X"π       CASE "2": b$ = "XX"π       CASE "3": b$ = "XXX"π       CASE "4": b$ = "XL"π       CASE "5": b$ = "L"π       CASE "6": b$ = "LX"π       CASE "7": b$ = "LXX"π       CASE "8": b$ = "LXXX"π       CASE "9": b$ = "XC"π     END SELECTπ     n = n - 1π     IF n THENπ       SELECT CASE MID$(Arabic$, n, 1)π         CASE "1": c$ = "C"π         CASE "2": c$ = "CC"π         CASE "3": c$ = "CCC"π         CASE "4": c$ = "CD"π         CASE "5": c$ = "D"π         CASE "6": c$ = "DC"π         CASE "7": c$ = "DCC"π         CASE "8": c$ = "DCCC"π         CASE "9": c$ = "CM"π       END SELECTπ       n = n - 1π       IF n THENπ         n = VAL(MID$(Arabic$, n, 1))π         FOR i = 1 TO n: d$ = d$ + "M": NEXT iπ       END IFπ     END IFπ   END IFπ   PRINT CHR$(30);π   PRINT SPC(4 - LEN(Arabic$)); Arabic$; " = ";π   PRINT d$; c$; b$; a$π   PRINTπ LOOPπDave Gjessing                  MATH TEST                      dgjess@freenet.columbus.oh.us  03-30-96 (00:00)       QB, QBasic, PDS        459  15835    QMATHTST.BASDEFINT A-Zππ'QMATHTST.BAS - a little math test prog based on theπ'IFACE_06.BAS text user interface - Dave Gjessing 1996π'(as if *I* know anything about math! <BG>)ππ'Thanks to Ken Melvin for contributing the music bits to ABCπ'and to William Yu for maintaining same (ABC)ππmain:ππDLBox 2, 1, 23, 80, 176, 0, 15, 1, 0πMenuBar 1, 15, 1πDLBox 8, 26, 13, 54, 0, 1, 15, 1, 0πLOCATE 9, 30: PRINT "Addition"πLOCATE 10, 30: PRINT "Subtraction"πLOCATE 11, 30: PRINT "Multiplication"πLOCATE 12, 30: PRINT "Division"πIF TotalProbs! > 0 THENπ        Average! = (TotalCorrect! * 100) / TotalProbs!π        LOCATE 17, 18: PRINT " So far, your average score is  ";π        PRINT USING "###"; Average!;π        PRINT "% correct ";π        END IFπCommandPointer 9, 28, 12, 15, 1, DoLine%πSELECT CASE DoLine%π   CASE 9π   addprobsπ   GOTO mainπ   CASE 10π   subprobsπ   GOTO mainπ   CASE 11π   multprobsπ   GOTO mainπ   CASE 12π   divprobsπ   GOTO mainπ   CASE 610             'F10 key re-initializes score-keepingπ   TotalProbs! = 0π   TotalCorrect! = 0π   GOTO mainπ   CASE 900             'ESC key exits the programπ   CLSπ   LOCATE 11, 30: PRINT "Thanks for playing!"π   LOCATE 13, 25: PRINT "dgjess@freenet.columbus.oh.us"π   SLEEP 3: CLSπ   ENDπ   CASE ELSE            'anything else does nothingπ   GOTO mainπEND SELECTππSUB addprobsπSHARED TotalProbs!πSHARED TotalCorrect!πDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πMenuBar 2, 15, 1ππLOCATE 3, 4: PRINT "Addition test!"πLOCATE 5, 4: PRINT "I, your computer, will be making up addition problems"πLOCATE 6, 4: PRINT "for you, based on the answers you give to the next few questions."πLOCATE 10, 4: INPUT "What is the largest number you want me to use"; topsπLOCATE 12, 4: INPUT "How many problems do you want me to give you (up to 20)"; probsπIF probs > 20 THEN probs = 20πTotalProbs! = TotalProbs! + probsπcorrect = 0πwrong = 0πDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πRANDOMIZE topsπ            FOR I% = 1 TO probsπ                LOCATE 1, 2: PRINT (probs - I%) + 1; " to go";π                x = INT(RND * tops) + 1π                y = INT(RND * tops) + 1π                answer = x + yπ                DLBox 12, 20, 14, 60, 0, 1, 15, 1, 0π                LOCATE 13, 23: PRINT y; " plus "; x; " equals ";π                INPUT tryπ                IF try = answer THEN correct = correct + 1: PLAY "t240o3l8d#fgl8b-p8l8gl2b-": LOCATE 8, 37: PRINT "RIGHT!": SLEEP 1: LOCATE 8, 37: PRINT "      "π                IF try <> answer THENπ                PLAY "t255l16o1bo4dg#o2f"π                wrong = wrong + 1π                LOCATE 15, 30: PRINT "the answer is "; answer;π                SLEEP 2π                DLBox 2, 1, 23, 80, 0, 1, 15, 1, 0π                END IFπ                LOCATE 1, 2: PRINT STRING$(40, 0);π            NEXT I%πDLBox 2, 1, 23, 80, 176, 1, 15, 1, 0πDLBox 8, 26, 11, 54, 0, 1, 15, 1, 0πLOCATE 9, 28: PRINT "you got -> "; correct; "correct"πTotalCorrect! = TotalCorrect! + correctπLOCATE 10, 28: PRINT "you got -> "; wrong; "wrong"πIF wrong = 0 THEN BEEPπDLBox 14, 26, 16, 54, 0, 1, 15, 1, 0πLOCATE 15, 28: LINE INPUT "press ENTER to continue "; junk$ππEND SUBππSUB CommandPointer (firstline%, Col%, BotLimit%, Fgc%, Bgc%, DoLine%)π'this is where the user reacts to menu choices...ππCOLOR Fgc%, Bgc%πDoLine% = firstline%    'set aside the first line (sent with the sub call)π                        'as the upper limit to the list. (Work with DoLine%)πLOCATE firstline%, Col% 'go to the line and column called for in theπ                        'subroutine callπPRINT CHR$(16)          'and print the line pointer on the screenππDO                      'run around in circles awaiting instructionsπselection$ = INKEY$πselection$ = UCASE$(selection$)ππ'the next two IF's move the pointer up and down...πIF selection$ = CHR$(0) + "H" THEN           'UpArrowπ   LOCATE DoLine%, Col%: PRINT CHR$(0)       'first blank out old pointerπ   DoLine% = DoLine% - 1                     'move up one lineπ   IF DoLine% < firstline% THEN DoLine% = BotLimit% 'jump to bottom if at topπ   LOCATE DoLine%, Col%                      'go to where directedπ   PRINT CHR$(16)                            'print new pointer on screenπ   END IFπIF selection$ = CHR$(0) + "P" THEN           'DnArrowπ   LOCATE DoLine%, Col%: PRINT CHR$(0)       'cover the last pointerπ   DoLine% = DoLine% + 1                     'move down one lineπ   IF DoLine% > BotLimit% THEN DoLine% = firstline% 'jump to top if at bottomπ   LOCATE DoLine%, Col%                      'go to where directedπ   PRINT CHR$(16)                            'new pointerπ   END IFππ'this IF reacts to the user pressing the ENTER key. The sub ends with a newπ'value for DoLine%, equal to the line that the pointer was on.πIF selection$ = CHR$(13) THENπ    DoLine% = DoLine%π    EXIT SUBπ    END IFππ'these other IF's return a value for DoLine% which is not a valid screenπ'coordinate. It is up to the SELECT CASE statements that follow the lineπ'that called CommandPointer to determine what to do with the returned valueππIF selection$ = CHR$(0) + CHR$(81) THEN      'page down keyπ   DoLine% = 100π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(73) THEN      'page up keyπ   DoLine% = 200π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(59) THEN      'F1 keyπ   DoLine% = 601π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(60) THEN      'F2 keyπ   DoLine% = 602π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(61) THEN      'F3 keyπ   DoLine% = 603π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(62) THEN      'F4 keyπ   DoLine% = 604π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(63) THEN      'F5 keyπ   DoLine% = 605π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(64) THEN      'F6 keyπ   DoLine% = 606π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(65) THEN      'F7 keyπ   DoLine% = 607π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(66) THEN      'F8 keyπ   DoLine% = 608π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(67) THEN      'F9 keyπ   DoLine% = 609π   EXIT SUBπ   END IFπIF selection$ = CHR$(0) + CHR$(68) THEN      'F10 keyπ   DoLine% = 610π   EXIT SUBπ   END IFπIF selection$ = CHR$(27) THEN                'escape keyπ   DoLine% = 900π   EXIT SUBπ   END IFπLOOPπ'break out of the loop and return to the calling module with a new variableπ'called DoLine%, equal to the line number on screen where the selected itemπ'was being displayed, or else with a number beyond the screen size (100, 200,π'etc.), which will be used to convey special instructionsπEND SUBππSUB divprobsπSHARED TotalProbs!πSHARED TotalCorrect!ππDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πMenuBar 2, 15, 1ππLOCATE 3, 4: PRINT "Division test!"πLOCATE 5, 4: PRINT "I, your computer, will be making up division problems"πLOCATE 6, 4: PRINT "for you, based on the answers you give to the next few questions."πLOCATE 8, 4: INPUT "What number do you want to divide by"; tableπLOCATE 10, 4: INPUT "What is the largest number you want me to use"; topsπLOCATE 12, 4: INPUT "How many problems do you want me to give you (up to 20)"; probsπIF probs > 20 THEN probs = 20πTotalProbs! = TotalProbs! + probsπcorrect = 0πwrong = 0πDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πRANDOMIZE topsπ            FOR I% = 1 TO probsπ                LOCATE 1, 2: PRINT (probs - I%) + 1; " to go";π                x = INT(RND * tops) + 1π                answer = x \ tableπ                DLBox 12, 20, 14, 60, 0, 1, 15, 1, 0π                LOCATE 13, 23: PRINT x; " divided by "; table; " equals ";π                LINE INPUT try$π                IF LEN(try$) = 0 THEN GOTO wrongπ                try = VAL(try$)π                IF try = answer THENπ                correct = correct + 1: PLAY "t240o3l8d#fgl8b-p8l8gl2b-": LOCATE 8, 37: PRINT "RIGHT!": SLEEP 1: LOCATE 8, 37: PRINT "      "π                GOTO nextprobπ                END IFπ                IF try <> answer THENπwrong:π                PLAY "t255l16o1bo4dg#o2f"π                wrong = wrong + 1π                LOCATE 15, 30: PRINT "the answer is "; answer;π                SLEEP 2π                DLBox 2, 1, 23, 80, 0, 1, 15, 1, 0π                END IFπnextprob:π                LOCATE 1, 2: PRINT STRING$(40, 0);π            NEXT I%πDLBox 2, 1, 23, 80, 176, 1, 15, 1, 0πDLBox 8, 26, 11, 54, 0, 1, 15, 1, 0πLOCATE 9, 28: PRINT "you got -> "; correct; "correct"πTotalCorrect! = TotalCorrect! + correctπLOCATE 10, 28: PRINT "you got -> "; wrong; "wrong"πIF wrong = 0 THEN BEEPπDLBox 14, 26, 16, 54, 0, 1, 15, 1, 0πLOCATE 15, 28: LINE INPUT "press ENTER to continue "; junk$ππEND SUBππSUB DLBox (TLine, LCol, BLine, RCol, FieldNo, border, Fgc, Bgc, shadow)π'DLBOX (DeLuxe Box) is a fancy box sub-routine that includesπ'a user-defined background character parameter, single or double-π'line border (or no border), and foreground and background color parameters,π'plus shadow or no shadow option.π'π'The no-border option makes this "box" routine able to replace "background"π'routines.πCOLOR Fgc, Bgcπ   IF border = 0 THEN    'no border at allπ      ULC = FieldNoπ      URC = FieldNoπ      LLC = FieldNoπ      LRC = FieldNoπ      HORIZ = FieldNoπ      VERT = FieldNoπ         END IFπ   IF border = 1 THEN   'single line borderπ      ULC = 218         'upper left cornerπ      URC = 191         'upper right cornerπ      LLC = 192         'lower left cornerπ      LRC = 217         'lower right cornerπ      HORIZ = 196       'horizontal linesπ      VERT = 179        'vertical linesπ         END IFπ   IF border = 2 THEN   'double line borderπ      ULC = 201         'ditto all aboveπ      URC = 187π      LLC = 200π      LRC = 188π      HORIZ = 205π      VERT = 186π         END IFππLOCATE TLine, LColπPRINT CHR$(ULC) + STRING$(((RCol - LCol) - 1), CHR$(HORIZ)) + CHR$(URC)πFOR x = 1 TO (BLine - TLine) - 1πLOCATE ((TLine + 1) + NextLine), LColπ   NextLine = NextLine + 1πPRINT CHR$(VERT) + STRING$(((RCol - LCol) - 1), CHR$(FieldNo)) + CHR$(VERT);πNEXT xπLOCATE BLine, LColπPRINT CHR$(LLC) + STRING$(((RCol - LCol) - 1), CHR$(HORIZ)) + CHR$(LRC);π ππIF shadow = 1 THEN   'for consistancy, use 1 for shadows, 0 for no shadowπ   IF BLine > 24 OR RCol > 79 THEN GOTO badshadowπCOLOR 7, 0           'shadows are darkππLOCATE BLine + 1, LCol + 1                 'across theπPRINT STRING$((RCol - LCol), CHR$(176));  'bottom...π πFOR I = TLine + 1 TO BLine + 1              'on theπLOCATE I, RCol + 1: PRINT CHR$(176);         'right sideπNEXTππEND IFπCOLOR Fgc, Bgc       'restore original colorsπbadshadow:ππEND SUBππSUB MenuBar (message, Fgc, Bgc)πCOLOR Bgc%, Bgc%                             'nothing but backgroundπLOCATE 1, 1: PRINT STRING$(80, 219);           'color bar 1 at topπLOCATE 24, 1: PRINT STRING$(80, 219);          'color bar 2 at bottomπLOCATE 25, 1: PRINT STRING$(80, 219);          'color bar 3 at very bottomπCOLOR Fgc%, Bgc%                             'activate foreground colorπprogname$ = "QMATHTST.BAS - a math test program in QBasic"πtitle1$ = "Select a subject"πLOCATE 25, (40 - (LEN(progname$) / 2)): PRINT progname$;   'prog nameππIF message% = 1 THENπ    LOCATE 1, 1: PRINT " <ESC> quits "; CHR$(4); " <ARROWS> & <ENTER> to select "; CHR$(4); " <F10> to re-set score"π    LOCATE 24, (40 - (LEN(title1$) / 2)): PRINT title1$;πEND IFππIF message% = 2 THENπEND IFππIF message% = 3 THENπEND IFππIF message% = 4 THENπEND IFππIF message% = 5 THENπEND IFππIF message% = 6 THENπEND IFππIF message% = 7 THENπEND IFππIF message% = 8 THENπEND IFππIF message% = 9 THENπEND IFππIF message% = 10 THENπEND IFππEND SUBππSUB multprobsπSHARED TotalProbs!πSHARED TotalCorrect!ππDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πMenuBar 2, 15, 1ππLOCATE 3, 4: PRINT "Multiplication test!"πLOCATE 5, 4: PRINT "I, your computer, will be making up multiplication problems"πLOCATE 6, 4: PRINT "for you, based on the answers you give to the next few questions."πLOCATE 8, 4: INPUT "What number do you want to multiply by"; tableπLOCATE 10, 4: INPUT "What is the largest number you want me to use"; topsπLOCATE 12, 4: INPUT "How many problems do you want me to give you (up to 20)"; probsπIF probs > 20 THEN probs = 20πTotalProbs! = TotalProbs! + probsππcorrect = 0πwrong = 0πDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πRANDOMIZE topsπ            FOR I% = 1 TO probsπ                LOCATE 1, 2: PRINT (probs - I%) + 1; " to go";π                x = INT(RND * tops) + 1π                answer = x * tableπ                DLBox 12, 20, 14, 60, 0, 1, 15, 1, 0π                LOCATE 13, 23: PRINT table; " times "; x; " equals ";π                INPUT tryπ                IF try = answer THEN correct = correct + 1: PLAY "t240o3l8d#fgl8b-p8l8gl2b-": LOCATE 8, 37: PRINT "RIGHT!": SLEEP 1: LOCATE 8, 37: PRINT "      "π                IF try <> answer THENπ                PLAY "t255l16o1bo4dg#o2f"π                wrong = wrong + 1π                LOCATE 15, 30: PRINT "the answer is "; answer;π                SLEEP 2π                DLBox 2, 1, 23, 80, 0, 1, 15, 1, 0π                END IFπ                LOCATE 1, 2: PRINT STRING$(40, 0);π            NEXT I%πDLBox 2, 1, 23, 80, 176, 1, 15, 1, 0πDLBox 8, 26, 11, 54, 0, 1, 15, 1, 0πLOCATE 9, 28: PRINT "you got -> "; correct; "correct"πTotalCorrect! = TotalCorrect! + correctπLOCATE 10, 28: PRINT "you got -> "; wrong; "wrong"πIF wrong = 0 THEN BEEPπDLBox 14, 26, 16, 54, 0, 1, 15, 1, 0πLOCATE 15, 28: LINE INPUT "press ENTER to continue "; junk$πEND SUBππSUB subprobsπSHARED TotalProbs!πSHARED TotalCorrect!ππDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πMenuBar 2, 15, 1ππLOCATE 3, 4: PRINT "Subtraction test!"πLOCATE 5, 4: PRINT "I, your computer, will be making up subtraction problems"πLOCATE 6, 4: PRINT "for you, based on the answers you give to the next few questions."πLOCATE 10, 4: INPUT "What is the largest number you want me to use"; topsπLOCATE 12, 4: INPUT "How many problems do you want me to give you (up to 20)"; probsπIF probs > 20 THEN probs = 20πTotalProbs! = TotalProbs! + probsππcorrect = 0πwrong = 0πDLBox 2, 1, 23, 80, 0, 1, 15, 1, 0πRANDOMIZE topsπ            FOR I% = 1 TO probsπ                LOCATE 1, 2: PRINT (probs - I%) + 1; " to go";π                x = INT(RND * tops) + 1π                y = INT(RND * tops) + 1π                DLBox 12, 20, 14, 60, 0, 1, 15, 1, 0π                IF x >= y THENπ                answer = x - yπ                LOCATE 13, 23: PRINT x; " take away "; y; " equals ";π                END IFπ                IF y > x THENπ                answer = y - xπ                LOCATE 13, 23: PRINT y; " take away "; x; " equals ";π                END IFπ                INPUT tryπ                IF try = answer THEN correct = correct + 1: PLAY "t240o3l8d#fgl8b-p8l8gl2b-": LOCATE 8, 37: PRINT "RIGHT!": SLEEP 1: LOCATE 8, 37: PRINT "      "π                IF try <> answer THENπ                PLAY "t255l16o1bo4dg#o2f"π                wrong = wrong + 1π                LOCATE 15, 30: PRINT "the answer is "; answer;π                SLEEP 2π                DLBox 2, 1, 23, 80, 0, 1, 15, 1, 0π                END IFπ                LOCATE 1, 2: PRINT STRING$(40, 0);π            NEXT I%πDLBox 2, 1, 23, 80, 176, 1, 15, 1, 0πDLBox 8, 26, 11, 54, 0, 1, 15, 1, 0πLOCATE 9, 28: PRINT "you got -> "; correct; "correct"πTotalCorrect! = TotalCorrect! + correctπLOCATE 10, 28: PRINT "you got -> "; wrong; "wrong"πIF wrong = 0 THEN BEEPπDLBox 14, 26, 16, 54, 0, 1, 15, 1, 0πLOCATE 15, 28: LINE INPUT "press ENTER to continue "; junk$ππEND SUBππDave Gjessing                  BUBBLE SORT                    dgjess@freenet.columbus.oh.us  01-01-96 (00:00)       QB, QBasic, PDS        93   3331     BUBLSORT.BAS'SORTER3.BAS    Dave Gjessing, 12/31/95, cleaned and remarked 1/1/96π'I wanted to figure out how to sort a random file before the year was out!π'This routine seems to do the job pretty darn well.π'-worked this out with playing cards on the kitchen table. I guess this isπ'what is called a "bubble sort".ππDEFINT A-ZπTYPE fullnameπ   firstN AS STRING * 20π   lastN AS STRING * 20πEND TYPEπDIM SHARED entry AS fullnameπ'************************ start ******************************πmenu:πCLSπPRINT "1 - run the sorter"πPRINT "2 - add records"πPRINT "3 - review file"πPRINT "K - kill the file"πPRINT "(Q)uit"ππDO                      'get a keystrokeπans$ = INKEY$πIF ans$ = "1" THEN GOTO sortfileπIF ans$ = "2" THEN GOTO addrecsπIF ans$ = "3" THEN GOTO reviewπIF ans$ = "K" OR ans$ = "k" THEN KILL "sorter3.dat": GOTO menuπIF ans$ = "Q" OR ans$ = "q" THEN ENDπLOOPππ'******************> the sorting routine <*********************πsortfile:πOPEN "sorter3.dat" FOR RANDOM AS #1 LEN = LEN(entry)πnumrec = LOF(1) / LEN(entry)πDIM A AS fullname      'make a couple of distinct arrays to    πDIM B AS fullname      'hold TYPE fullname file entries in memoryππFOR x = 1 TO numrec               'do the whole thing for as manyπcounter = 1                       'records as there areππFOR y = 1 TO numrec - 1           '(-1 or blank record is added)π GET #1, counter, entry           'get the first (or next) recordπ  A = entry                       'put it in array Aπ   GET #1, counter + 1, entry     'get the second (or next + 1) recordπ    B = entry                     'put it in array Bπ    IF UCASE$(A.lastN) > UCASE$(B.lastN) THEN  'compare the arrays...ππ      'if the first is greater than the second, then switch theirπ      'places in the file, as follows.π       π        '(you may compare (and so sort by) *any* element of the array)π        '(the UCASE$ comparison is important; an uppercase letter hasπ        'a different ASCII value than it's lowercase counterpart!)ππ    entry = B                     'temporarily make entry = Bπ    PUT #1, counter, entry        'put that in A's former place (counter)π    entry = A                     'temporarily make entry = Aπ    PUT #1, counter + 1, entry    'put in B's former place (counter + 1)π    END IFπ   counter = counter + 1          'bump the counter(s)π  NEXT y                          'do this for all of themπNEXT x                            'do *entire* process for all of themπCLOSE 1                           'done!πGOTO menuππ'****************** get sample data ****************************πaddrecs:πLINE INPUT "first name : "; entry.firstNπLINE INPUT "last name  : "; entry.lastNπOPEN "sorter3.dat" FOR RANDOM AS #1 LEN = LEN(entry)πnumrec = LOF(1) / LEN(entry)πnumrec = numrec + 1πPUT #1, numrec, entryπCLOSE 1πGOTO menuππ'****************** look at the file ***************************πreview:πCLSπPRINT "here is the file": PRINTπOPEN "sorter3.dat" FOR RANDOM AS #1 LEN = LEN(entry)πnumrec = LOF(1) / LEN(entry)πcounter = 1πFOR x = counter TO numrecπGET #1, counter, entryπPRINT entry.lastN; " "; entry.firstNπcounter = counter + 1πNEXT xπPRINT : LINE INPUT "enter to continue"; junk$πCLOSE 1πGOTO menuπ'************************* end *******************************ππChristopher Pinder             EXPRESSION EVALUATOR           comp.lang.basic.misc           04-14-96 (10:55)       PB                     175  4500     EVALUATE.BAS' POWER BASIC SOURCEπ' A Recusive Descent Bracket Thingy to mess with parenthesized?π' Expressions. This is a bodged version in BASIC of the code givenπ' in Bjarne Stroustrup's The C++ Programming Language with theπ' Symbol Table Stuff stripped out.π' Very little error checking etc... but it works (Famous last words)π' Probably got more bugs than three year old yogurt but hey !ππ' I'm not too sure how copyright would go regarding a bit of codeπ' translated from a book into another language so I won't donate itπ' cos I might not have the right. But I wrote this version and I don'tπ' care wot happens to it.ππ%NUMBER   = 1π%END      = 3π%PLUS     = 4π%MINUS    = 5π%MUL      = 6π%DIV      = 7π%LP       = 8π%RP       = 9ππshared EVAL$πshared n$,vπshared currenttoken%ππFUNCTION  GetToken%π  shared n$,vπ  shared EVAL$π  shared currenttoken%π  static state%π  static curpos%π    if state% = 0 then curpos% = 1:n$="" 'yeuch !ππ        NUM$="0123456789."π        OPER$="+-*/=()~!@"π        WHITE$=" "+chr$(8)πππ'Skip whitespaceπ        x$=mid$(EVAL$,curpos%,1)π        l% = len(EVAL$)π        while (((instr(WHITE$,x$)) and (curpos%<l%) ))π          incr curpos%π          x$=mid$(EVAL$,curpos%,1)π        wendπ        if curpos% >= l% thenπ            currenttoken% = %END:π            state% = 0:π            exit functionπ        end ifππ        state% = 1:π        dp% = 0:π        zz$=""π        'do the numbers firstπ        if(instr(NUM$,x$)>0)thenπ          while   ((instr(NUM$,x$)>0)  and_π                  (instr(WHITE$,x$)=0) and_π                  (instr(OPER$,x$)=0)  and_π                  (dp% < 2))π        if x$="." then incr dp%:π            if dp% = 2 then exit function:π            zz$ =zz$+ x$π            if curpos% < l% thenπ              incr curpos%π                x$ = mid$(EVAL$,curpos%,1)π            end ifπ         wendπ         v = val(zz$)π         currenttoken% = %NUMBER:π         exit function:π         end ifππ         if instr(OPER$,x$) thenπ          incr curpos%π          select case x$:π              case "+":currenttoken% = %PLUSπ              case "-":currenttoken% = %MINUSπ              case "*":currenttoken% = %MULπ              case "/":currenttoken% = %DIVπ              case "(":currenttoken% = %LPπ              case ")":currenttoken% = %RPπ            case elseπ              currenttoken% = %END:π            end selectπ            exit functionπ         end ifπ end function:ππfunction exprπ     shared n$,v:π         shared currenttoken%π         local myleftπ         myleft = termπ         while 1π         select case currenttoken%π         case %PLUSπ          GetToken%π            myleft = myleft+term:iterateπ         case %MINUSπ          GetToken%π            myleft = myleft-term:iterateπ         case elseπ            expr = myleft: exit function:π         end selectπ         wendπend functionππfunction termπ    shared n$,v:π    local myleftπ        myleft = primπ        while 1π        select case currenttoken%π        case %MULπ          GetToken%π            myleft = myleft * prim: iterateπ        case %DIVπ          GetToken%π            d = prim : if d = 0.00 then d = 1π            myleft = myleft / d: iterateπ            case elseπ            term = myleft:exit function:π            end selectπ            wendπ    end functionπππfunction primπ    shared n$,v:π  select case currenttoken%π      case %NUMBERπ          prim = vπ            GetToken%π        case %LPπ          GetToken%π            e = exprπ            if(currenttoken% <> %RP) thenπ              prim = 0:π                print "Mismatched Parenthesis"π                exit functionπ                end ifπ            GetToken%π            prim = e:exit function:ππ        case %MINUSπ          GetToken%π            prim = - prim: exit functionππ        case %ENDπ        prim = 0:π        end selectπend function:πππFunction Evaluate(p$)π         shared EVAL$π         EVAL$=p$+" "    'cos we read ahead - tacky I know !π         GetToken%π         Evaluate = expr!π         end functionππ'----------------------------------------------------------------------π' And now - to eat the pudding !π'----------------------------------------------------------------------πππclsπprint "input or ! to end"πwhile a$ <> "!"π  a$ =""π  input a$π  ? a$ " = " ; evaluate(a$)πwendπLarry Stone                    EXTRACT/SET LOW & HIGH BYTES   QB TidBits                     06-07-91 (11:09)       QB, QBasic, PDS        90   3617     LSET.BAS    'Code to extract (or set) low and high bytes from an integer by Larry Stone,π'June 7, 1991.π'π'Code to extract (or set) low and high integers from a LONG derived from codeπ'published in the June, 1991, issue of "Inside QuickBASIC" by Doug Quebbeman.ππDEFINT A-Z                      'Default to integersππ'****************************************************************************π'                              TYPE Declarations                            *π'****************************************************************************ππTYPE Integr                     'Create a template (structure), Integrπ    Num AS INTEGER              '(only has 1 element)πEND TYPEππTYPE SplitInt                   'Create a template (structure), SplitIntπ    LowByte AS STRING * 1π    HiByte  AS STRING * 1πEND TYPEππTYPE Longe                      'Create a template (structure), Longeπ    Dword AS LONG               '(only has 1 element)πEND TYPEππTYPE SplitLong                  'Create a template (structure), SplitLongπ    LowWord AS INTEGERπ    HiWord AS INTEGERπEND TYPEππ'****************************************************************************π'                 DIM memory variables as Structured TYPEs                  *π'****************************************************************************ππDIM Integr AS Integr            'Create our memory variable, IntegrπDIM SplitInt AS SplitInt        'Create our memory variable, SplitIntπDIM Longe AS Longe              'Create our memory variable, LongeπDIM SplitLong AS SplitLong      'Create our memory variable, SplitLongππ'****************************************************************************π'                          Make It Work - Main Code                         *π'****************************************************************************ππCLS                             'Clear the screenππIntegr.Num = 32767πPRINT "Our INTEGER"; Integr.Num;ππLSET SplitInt = Integr          'Get low and high bytes of our IntegrπPRINT "has a low byte of"; ASC(SplitInt.LowByte);πPRINT "and a high byte of"; ASC(SplitInt.HiByte)ππSplitInt.HiByte = CHR$(128)     'Assign a new high byte for our IntegrπPRINT "Setting the high byte of the INTEGER to"; ASC(SplitInt.HiByte);ππLSET Integr = SplitInt          'Set the Integr to these new byte valuesπPRINT "changes it's value to "; Integr.NumπPRINTπππLonge.Dword = 131071πPRINT "Our LONG Integer"; Longe.Dword;ππLSET SplitLong = Longe          'Get the low and high integers of our LongeπPRINT "has a low integer of "; SplitLong.LowWord;πPRINT "and a high integer of"; SplitLong.HiWordππIntegr.Num = SplitLong.LowWord  'Assign Integr as the LowWordπLSET SplitInt = Integr          'Now get the bytes of our LowWordππPRINT "The low integer's ( "; Integr.Num; ") low byte is";πPRINT ASC(SplitInt.LowByte);πPRINT "and its high byte is"; ASC(SplitInt.HiByte)ππIntegr.Num = SplitLong.HiWord   'Assign Integr as the HiWordπLSET SplitInt = Integr          'Now get the low and high bytes of HiWordππPRINT "The high integer's ("; Integr.Num; ") low byte is";πPRINT ASC(SplitInt.LowByte);πPRINT "and its high byte is"; ASC(SplitInt.HiByte)πPRINTππSplitLong.HiWord = 32767        'Change the high INTEGER of our variableππPRINT "Assigning"; SplitLong.HiWord; "as our LONG's high word ";πLSET Longe = SplitLong          'Now assign the above integers to LongeππPRINT "changes its value to"; Longe.DwordπPRINT "The low integer of"; Longe.Dword; "reports as "; SplitLong.LowWord;πPRINT "and the high integer is"; SplitLong.HiWordπTony Elliott                   MONITOR SHELL & GET ERRORLEVEL QBTIPS_?.DOC                   12-23-92 (14:35)       ASM                    87   2521     MONSHELL.ASM; MonitorShell (MONSHELL.ASM)ππ; Written by Tony Elliottππ; EllTech Development, Inc.π; 4374 Shallowford Industrial Parkwayπ; Marietta, GA 30066π; (404) 928-8960 Voice or (404) 928-7111 BBS (DS)ππ; Released into the public domain.ππ; This routine is written for Microsoft QuickBASIC 4.x, BASIC 6.x and Microsoftπ; PDS 7.x. Assemble using MASM 5.1:  MASM MONSHELL;ππ; You can link it directly to your program, place it in a LINK library (.LIB)π; or a .QLB.ππ; To use it:ππ;   DECLARE SUB MonitorShell ()π;   DECLARE FUNCTION FetchErrorLevel% ()π;π;   CALL MonitorShellπ;   SHELL "PkZip -Xxy"π;   PRINT "ErrorLevel returned from SHELL:";FetchErrorLevel%ππ.model medium, basicπ.codeππOld21        Label Dword        ;Label pointing to old Int 21h handlerπOld21Offset  dw ?               ;Offset partπOld21Segment dw ?               ;Segment partπMonitorSet   db 0               ;Our "hooked" flagπExitCode     db ?               ;Where we store the exit codeππMonitorShell proc uses dsππ    ; From BASIC: CALL MonitorShellππ    cmp cs:MonitorSet,0         ;Are we already hooked?π    jnz MonitorExit             ;If so, exitπ    mov ax,3521h                ;Get current vector for int 21hπ    int 21hπ    mov cs:Old21Segment,es      ;Remember it for laterπ    mov cs:Old21Offset,bxπ    mov ax,2521hπ    push csπ    pop ds                      ;Point int 21h handler to our codeπ    mov dx, offset OurInt21π    int 21hπ    mov cs:MonitorSet,-1        ;Set our flagππMonitorExit:π    retππOurInt21:                       ;Our Int 21h handlerπ    cmp ah,4ch                  ;Is it a 'terminate' request?π    jnz Continue                ;If not, continue onππ    mov cs:ExitCode,al          ;Remember the exit codeπ    push axπ    push dsπ    mov ax,2521h                ;Unhook ourself after the first hitπ    mov ds,Old21Segmentπ    mov dx,Old21Offsetπ    int 21h                     ;Point Int 21h back to originalπhandlerπ    pop dsπ    pop axπ    mov cs:MonitorSet,0         ;Set out flag back to zeroπ    πContinue:π    jmp dword ptr [Old21]       ;Transfer control to original Int 21hππMonitorShell endpππFetchErrorLevel procππ    ;From BASIC: DECLARE FUNCTION FetchErrorLevel%π    ;            PRINT "Last errorlevel:"; FetchErrorLevel%ππ    mov al,cs:ExitCode          ;Put the errorlevel into alπ    xor ah,ah                   ;Zero ahπ    ret                         ;ErrorLevel returned as resultππFetchErrorLevel endpπ    endπBrent Ashley                   POSTIT! 5.0 FOR VB/DOS         QBTIPS_I.DOC                   03-02-93 (15:50)       VBDOS                  815  22307    VBPOSTIT.BAS'I've rewritten the recent PostIt v4.0 for VB/DOS as v5.0.π'You will notice I have cleaned up the code considerably,π'imposing a consistent style, insulating modules fromπ'each other, eliminating global variables, and added aπ'forms-based interface.π'π'I plan to finish a cleaned up QB version soon, too.π'π'Here is the make file for the project, called PI.MAK:π'π'POSTIT.FRMπ'PROGRESS.FRMππ'In the following messages are the two files listed above.ππ'Version 1.00πBEGIN Form frmPostitπ  BackColor    = QBColor(3)π  BorderStyle  = 1π  Caption      = "PostIt!"π  ControlBox   = 0π  Height       = Char(18)π  Left         = Char(9)π  MaxButton    = 0π  MinButton    = 0π  Top          = Char(2)π  Width        = Char(51)π  BEGIN CommandButton cmdGoπ    BackColor    = QBColor(3)π    Caption      = "&Do that PostIt magic!"π    Default      = -1π    Height       = Char(3)π    Left         = Char(0)π    TabIndex     = 16π    Top          = Char(13)π    Width        = Char(35)π  ENDπ  BEGIN CommandButton cmdExitπ    BackColor    = QBColor(3)π    Cancel       = -1π    Caption      = "E&xit"π    Height       = Char(3)π    Left         = Char(35)π    TabIndex     = 17π    Top          = Char(13)π    Width        = Char(14)π  ENDπ  BEGIN Frame fraOptπ    BackColor    = QBColor(3)π    Caption      = "Options"π    Height       = Char(10)π    Left         = Char(24)π    TabIndex     = 8π    Top          = Char(3)π    Width        = Char(25)π    BEGIN Frame fraFmtπ      BackColor    = QBColor(3)π      Caption      = "Format"π      Height       = Char(4)π      Left         = Char(1)π      TabIndex     = 13π      Top          = Char(4)π      Width        = Char(21)π      BEGIN OptionButton optFmtπ        BackColor    = QBColor(3)π        Caption      = "&Text MsgSplit"π        Height       = Char(1)π        Index        = 1π        Left         = Char(1)π        TabIndex     = 15π        TabStop      = 0π        Top          = Char(1)π        Value        = 0π        Width        = Char(18)π      ENDπ      BEGIN OptionButton optFmtπ        BackColor    = QBColor(3)π        Caption      = "&Binary PostIt"π        Height       = Char(1)π        Index        = 0π        Left         = Char(1)π        TabIndex     = 14π        Top          = Char(0)π        Value        = -1π        Width        = Char(18)π      ENDπ    ENDπ    BEGIN Label lblRsvdπ      BackColor    = QBColor(3)π      BorderStyle  = 0π      Caption      = "&Reserved Lns:"π      Height       = Char(1)π      Left         = Char(1)π      TabIndex     = 11π      Top          = Char(2)π      Width        = Char(14)π    ENDπ    BEGIN TextBox txtRsvdπ      BackColor    = QBColor(3)π      BorderStyle  = 1π      Height       = Char(1)π      Left         = Char(15)π      MultiLine    = 0π      TabIndex     = 12π      Text         = "3"π      Top          = Char(2)π      Width        = Char(7)π    ENDπ    BEGIN Label lblLenπ      BackColor    = QBColor(3)π      BorderStyle  = 0π      Caption      = "Page &Length:"π      Height       = Char(1)π      Left         = Char(1)π      TabIndex     = 9π      Top          = Char(0)π      Width        = Char(13)π    ENDπ    BEGIN TextBox txtLenπ      BackColor    = QBColor(3)π      BorderStyle  = 1π      Height       = Char(1)π      Left         = Char(15)π      MultiLine    = 0π      TabIndex     = 10π      Text         = "95"π      Top          = Char(0)π      Width        = Char(7)π    ENDπ  ENDπ  BEGIN CommandButton cmdSourceπ    BackColor    = QBColor(3)π    Caption      = "&Open..."π    Height       = Char(3)π    Left         = Char(40)π    TabIndex     = 2π    Top          = Char(0)π    Width        = Char(9)π  ENDπ  BEGIN Frame fraOutπ    BackColor    = QBColor(3)π    Caption      = "Output"π    Height       = Char(10)π    Left         = Char(0)π    TabIndex     = 3π    Top          = Char(3)π    Width        = Char(23)π    BEGIN Label lblExtπ      BackColor    = QBColor(3)π      BorderStyle  = 0π      Caption      = "&Extension:"π      Height       = Char(1)π      Left         = Char(1)π      TabIndex     = 6π      Top          = Char(5)π      Width        = Char(11)π    ENDπ    BEGIN Label lblPrefixπ      BackColor    = QBColor(3)π      BorderStyle  = 0π      Caption      = "&Prefix:"π      Height       = Char(1)π      Left         = Char(1)π      TabIndex     = 4π      Top          = Char(2)π      Width        = Char(8)π    ENDπ    BEGIN TextBox txtPrefixπ      BackColor    = QBColor(3)π      BorderStyle  = 1π      Height       = Char(3)π      Left         = Char(9)π      MultiLine    = 0π      TabIndex     = 5π      Text         = "POSTIT"π      Top          = Char(1)π      Width        = Char(11)π    ENDπ    BEGIN TextBox txtExtπ      BackColor    = QBColor(3)π      BorderStyle  = 1π      Height       = Char(3)π      Left         = Char(12)π      MultiLine    = 0π      TabIndex     = 7π      Text         = "PIT"π      Top          = Char(4)π      Width        = Char(8)π    ENDπ  ENDπ  BEGIN Frame fraSourceπ    BackColor    = QBColor(3)π    Caption      = "&Source File:"π    Height       = Char(3)π    Left         = Char(0)π    TabIndex     = 0π    Top          = Char(0)π    Width        = Char(40)π    BEGIN TextBox txtSourceπ      BackColor    = QBColor(3)π      BorderStyle  = 0π      Height       = Char(1)π      Left         = Char(0)π      MultiLine    = 0π      TabIndex     = 1π      Text         = ""π      Top          = Char(0)π      Width        = Char(38)π    ENDπ  ENDπENDπ'$FORM frmProgressπ'$INCLUDE: 'constant.bi'π' Requires: CMNDLG.LIB/QLBππ'π' PostIt! - version 5.0 for VB/DOSπ'π' this code is in the PUBLIC DOMAINπ'π'         *********************************************************π'         *      PostIt! THE Binary <-> BASIC Script Creator      *π'         *********************************************************π'                                   * * *π'π' Purpose:π'π'   To enable the posting of  compressed  listings  on a text only net.π'   This program takes a binary or BASIC input file and converts it toπ'   a series of small, postable files which other people can captureπ'   and run to get the original binary file.π'π' Credits:π'π'   PostIt! meaty bits by Rich Geldreichπ'π'   MsgSplit meaty bits by Scott Wunsch and Victor Yiuπ'π'   with mods by:π'                Jim Giordanoπ'                Mark H. Butlerπ'                Quinn Tyler Jacksonπ'π'   this VB/DOS version written by Brent Ashley March 1st, 1993π'π'   Changes include modularizing and clarifying, imposingπ'   a consistent coding style, commenting, and speeding upπ'   PostIt module with single buffer grabπ'ππSUB cmdExit_Click ()π  ' pretty straightforward...π  ENDπEND SUBππSUB cmdGo_Click ()π  ' dir$ will crap out if given an invalid filename (i.e. ":" )π  ON LOCAL ERROR RESUME NEXTπ  IF LEN(LTRIM$(txtSource.text)) = 0 THENπ    BEEPπ    MSGBOX "You must choose a source file", 0, "Oops!"π  ELSEIF LEN(DIR$(txtSource.text)) = 0 THENπ    BEEPπ    MSGBOX "The file `" + txtSource.text + "' doesn't exist", 0, "Oops!"π  ELSEπ    ' all ok - do itπ    LOAD frmProgressπ  END IFπEND SUBππSUB cmdSource_Click ()ππ  ' get filespec using common dialogπ  CALL FileOpen(FileName$, PathName$, "*.*", "Choose Source File", 0, 7, 0, Cancel)ππ  IF NOT Cancel THENπ    ' ensure trailing \π    IF RIGHT$(PathName$, 1) <> "\" THEN PathName$ = PathName$ + "\"π    ' check for file too bigπ    FileNum = FREEFILEπ    OPEN PathName$ + FileName$ FOR BINARY AS #FileNumπ    IF LOF(FileNum) > 24575& THENπ      m$ = "Sorry - that file is bigger than the 24k limit!"π      BEEPπ      MSGBOX m$, 0, "Oops!"π      EXIT SUBπ    END IFππ    ' analyse for binary or msgsplitπ    Buf$ = SPACE$(32)π    GET #FileNum, , Buf$π    IsBinary = FALSEπ    FOR I = 1 TO LEN(Buf$)π      SELECT CASE ASC(MID$(Buf$, I, 1))π        CASE 0 TO 8, 14 TO 31π          ' control codesπ          IsBinary = TRUEπ          EXIT FORπ        CASE 128 TO 178, 219 TO 255π          ' might be binary, might notπ          HiAscii = HiAscii + 1π        CASE ELSEπ          ' text ascii or linedrawπ          ' passes throughπ      END SELECTπ    NEXTπ    ' set option according to analysed typeπ    IF IsBinary OR (HiAscii > 8) THENπ      optFmt(0).Value = TRUEπ    ELSEπ      optFmt(1).Value = TRUEπ    END IFππ    ' assign filespec to text boxπ    txtSource.text = PathName$ + FileName$ππ    ' extract prefix (first up to 6 chars of filename)π    DotPos = INSTR(FileName$, ".")π    IF DotPos THENπ      txtPrefix.text = LEFT$(LEFT$(FileName$, DotPos - 1), 6)π    ELSEπ      txtPrefix.text = LEFT$(FileName$, 6)π    END IFππ    ' we've got a file - get ready to do itπ    cmdGo.SETFOCUSπ  END IFππEND SUBππSUB Form_Load ()π  ' get source filename from command lineπ  FileSpec$ = COMMAND$π  IF LEN(DIR$(FileSpec$)) THENπ    txtSource.text = FileSpec$ππ    ' extract base filename from input filenameπ    FileBase$ = ""π    FOR I = LEN(FileSpec$) TO 1 STEP -1π      ThisChar$ = MID$(FileSpec$, I, 1)π      SELECT CASE ThisChar$π        CASE "\", ":", " "π          EXIT FORπ        CASE ELSEπ          FileBase$ = ThisChar$ + FileBase$π      END SELECTπ    NEXTππ    ' extract prefix (first up to 6 chars of filename)π    DotPos = INSTR(FileBase$, ".")π    IF DotPos THENπ      txtPrefix.text = LEFT$(LEFT$(FileBase$, DotPos - 1), 6)π    ELSEπ      txtPrefix.text = LEFT$(FileBase$, 6)π    END IFππ  END IFππ  ' set up border and title coloursπ  SCREEN.ControlPanel(ACTIVE_BORDER_BACKCOLOR) = CYANπ  SCREEN.ControlPanel(TITLEBAR_BACKCOLOR) = BLUEπ  SCREEN.ControlPanel(TITLEBAR_FORECOLOR) = YELLOWππ  frmPostit.SHOWπ  IF LEN(FileSpec$) = 0 THENπ    nl$ = CHR$(13) + CHR$(10)π    m$ = "           PostIt v5.0 for VB/DOS"π    m$ = m$ + nl$ + "                    ***" + nl$π    m$ = m$ + nl$ + "  PostIt by Rich Geldreich"π    m$ = m$ + nl$ + "  MsgSplit by Scott Wunsch and Victor Yiu  "π    m$ = m$ + nl$ + "  with mods by:"π    m$ = m$ + nl$ + "                Jim Giordano"π    m$ = m$ + nl$ + "                Mark H. Butler"π    m$ = m$ + nl$ + "                Quinn Tyler Jackson"π    m$ = m$ + nl$π    m$ = m$ + nl$ + "  VB/DOS version by Brent Ashley"π    m$ = m$ + nl$π    m$ = m$ + nl$ + "  PostIt! is in the PUBLIC DOMAIN"π    MSGBOX m$, 0, "Credits"π  END IFπEND SUBππSUB txtExt_Change ()π  ' save cursor positionπ  Cursor = txtExt.SelStartπ  ' uppercase and limit to three charsπ  txtExt.text = LEFT$(UCASE$(txtExt.text), 3)π  ' restore cursor positionπ  txtExt.SelStart = CursorπEND SUBππSUB txtLen_KeyPress (KeyAscii AS INTEGER)π  ' limit to numbersπ  SELECT CASE KeyAsciiπ    CASE ASC("0") TO ASC("9"), KEY_SPACE, KEY_DELETE, KEY_BACKπ      'okiedokieπ    CASE ELSEπ      BEEPπ      ' ignore keyπ      KeyAscii = 0π  END SELECTπEND SUBππSUB txtLen_LostFocus ()π  ' ensure valid Len valueπ  txtLen.text = LTRIM$(STR$(VAL(txtLen.text)))π  IF VAL(txtLen.text) > 99 THEN txtLen.text = "99"π  IF VAL(txtLen.text) < 3 THEN txtLen.text = "3"πEND SUBππSUB txtPrefix_Change ()π  ' save cursor positionπ  Cursor = txtPrefix.SelStartπ  ' uppercase and limit to six charactersπ  txtPrefix.text = LEFT$(UCASE$(txtPrefix.text), 6)π  ' restore cursor positionπ  txtPrefix.SelStart = CursorπEND SUBππSUB txtRsvd_KeyPress (KeyAscii AS INTEGER)π  ' limit to numbersπ  SELECT CASE KeyAsciiπ    CASE ASC("0") TO ASC("9"), KEY_SPACE, KEY_DELETE, KEY_BACKπ      'okiedokieπ    CASE ELSEπ      BEEPπ      ' ignore keyπ      KeyAscii = 0π  END SELECTπEND SUBππSUB txtRsvd_LostFocus ()π  ' ensure valid Rsvd valueπ  txtRsvd.text = LTRIM$(STR$(VAL(txtRsvd.text)))π  IF VAL(txtRsvd.text) > 50 THEN txtRsvd.text = "50"π  IF VAL(txtRsvd.text) < 0 THEN txtRsvd.text = "0"πEND SUBππBEGIN Form frmProgressπ  BackColor    = QBColor(3)π  BorderStyle  = 3π  Caption      = "Progress"π  ControlBox   = 0π  Height       = Char(14)π  Left         = Char(32)π  MaxButton    = 0π  MinButton    = 0π  Top          = Char(9)π  Width        = Char(40)π  BEGIN Label lblBarπ    BackColor    = QBColor(3)π    BorderStyle  = 1π    Caption      = ""π    Height       = Char(3)π    Left         = Char(8)π    TabIndex     = 0π    Top          = Char(5)π    Width        = Char(27)π  ENDπ  BEGIN Label lblPctπ    BackColor    = QBColor(3)π    BorderStyle  = 0π    Caption      = "000%"π    Height       = Char(1)π    Left         = Char(2)π    TabIndex     = 1π    Top          = Char(6)π    Width        = Char(4)π  ENDπ  BEGIN Label lblWritπ    BackColor    = QBColor(3)π    BorderStyle  = 0π    Caption      = "Now Writing File:"π    Height       = Char(1)π    Left         = Char(1)π    TabIndex     = 2π    Top          = Char(2)π    Width        = Char(18)π  ENDπ  BEGIN Label lblCurFileπ    BackColor    = QBColor(3)π    BorderStyle  = 1π    Caption      = ""π    Height       = Char(3)π    Left         = Char(20)π    TabIndex     = 3π    Top          = Char(1)π    Width        = Char(16)π  ENDπ  BEGIN CommandButton cmdAbortπ    BackColor    = QBColor(3)π    Cancel       = -1π    Caption      = "&Abort"π    Height       = Char(3)π    Left         = Char(11)π    TabIndex     = 4π    Top          = Char(9)π    Width        = Char(18)π  ENDπENDπDECLARE FUNCTION ShowProgress% (Percent%, CurFile$)πDECLARE SUB MsgSplit (InFileName$, OutPrefix$, Ext$, LPP%, Reserve%, LineLength%)πDECLARE SUB PostIt (InFileName$, OutPrefix$, Ext$, LPP%, Reserve%, LineLength%)ππ'$FORM frmPostitπ'$INCLUDE: 'constant.bi'πDIM SHARED InProgress, AbortππSUB cmdAbort_Click ()π  SHARED InProgress, Abortππ  ' button performs two functions - Abort or Exitπ  IF InProgress THENπ    ' abortπ    Abort = TRUEπ  ELSEπ    ' exitπ    UNLOAD frmProgressπ  END IFπEND SUBππSUB Form_Load ()π  SHARED InProgress, Abortππ  ' turn off underlying form controlsπ  frmPostit.Enabled = FALSEππ  ' get call parameters from control valuesπ  InFileName$ = LTRIM$(RTRIM$(frmPostit.txtSource.text))π  OutPrefix$ = LTRIM$(RTRIM$(frmPostit.txtPrefix.text))π  Ext$ = LTRIM$(RTRIM$(frmPostit.txtExt.text))π  LPP = VAL(frmPostit.txtLen.text)π  Reserve = VAL(frmPostit.txtRsvd.text)π  LineLength = 72ππ  ' show current formπ  frmProgress.SHOWππ  ' do itπ  InProgress = TRUEπ  IF frmPostit.optFmt(0).Value THENπ    ' binary postitπ    frmProgress.Caption = "Binary Postit"π    PostIt InFileName$, OutPrefix$, Ext$, LPP, Reserve, LineLengthπ  ELSEπ    ' text msgsplitπ    frmProgress.Caption = "Text MsgSplit"π    MsgSplit InFileName$, OutPrefix$, Ext$, LPP, Reserve, LineLengthπ  END IFπ  BEEPπ  InProgress = FALSEππ  ' show result on exit buttonπ  IF Abort THENπ    cmdAbort.Caption = "Aborted - E&xit"π  ELSEπ    cmdAbort.Caption = "Done - E&xit"π  END IFπEND SUBππSUB Form_Unload (Cancel AS INTEGER)π  ' re-enable main form controlsπ  frmPostit.Enabled = TRUEπ  ' set focus to exit buttonπ  frmPostit.cmdExit.SETFOCUSπ  ' clear flag for further callsπ  Abort = FALSEπEND SUBππSUB MsgSplit (InFileName$, OutPrefix$, Ext$, LPP, Reserve, LineLength)ππ  ' initialize thingsπ  Ver$ = "v5.0"π  Tab$ = CHR$(9)π  Quote$ = CHR$(34)π  Snip1$ = "______O_/_________________| SNIP |________________\_O_____"π  Snip2$ = "      O \                 | HERE |                / O"π  LinesOut = Reserve + 1π  FileOutNum = 1π  LPP = LPP - 4   ' lines per pageππ  ' extract base filename from input filenameπ  InFileBase$ = ""π  FOR I = LEN(InFileName$) TO 1 STEP -1π    ThisChar$ = MID$(InFileName$, I, 1)π    SELECT CASE ThisChar$π      CASE "\", ":", " "π        EXIT FORπ      CASE ELSEπ        InFileBase$ = ThisChar$ + InFileBase$π    END SELECTπ  NEXTππ  ' open input file and get file lengthπ  InFile = FREEFILEπ  OPEN InFileName$ FOR INPUT AS #InFileπ  FileLen = LOF(InFile)ππ  DOπ    ' build outfile name - use leading zeros so filenames sort properlyπ    OutN$ = OutPrefix$ + RIGHT$(STR$(100 + FileOutNum), 2) + "." + Ext$ππ    OutFile = FREEFILEπ    OPEN OutN$ FOR OUTPUT AS #OutFileππ    IF FileOutNum > 1 THENπ      PRINT #OutFile, "'>>> Start of page"; STR$(FileOutNum); " of "; InFileBase$π      PRINT #OutFile,π    ELSEπ      PRINT #OutFile, Snip1$π      PRINT #OutFile, Snip2$π      PRINT #OutFile, "'This file created by PostIt! "; Ver$π      PRINT #OutFile, "'>>> Start of page"; STR$(FileOutNum); " of "; InFileBase$π      PRINT #OutFile,π    END IFπ        PRINT #OutFile,π      END IFππ      CLOSE #OutFileππ      IF NOT EOF(InFile) THENπ        ' update counterπ        FileOutNum = FileOutNum + 1π        LinesOut = 1π      END IFππ  LOOP UNTIL EOF(InFile)ππ  ' show 100% if not abortedπ  IF UserAbort = 0 THEN Dummy = ShowProgress(100, OutN$)π  CLOSE #InFile, #OutFileππEND SUBππSUB PostIt (InFileName$, OutPrefix$, Ext$, LPP, Reserve, LineLength)ππ  Ver$ = "v5.0"ππ  ' initialization stuffπ  DIM Shift(5)π  Shift(0) = 1π  Shift(1) = 2π  Shift(2) = 4π  Shift(3) = 8π  Shift(4) = 16π  Shift(5) = 32ππ  LinesOut = LinesOut + 2ππ  ValidChars$ = "abcdefghijklmnopqrstuvwxyz"π  ValidChars$ = ValidChars$ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789()"ππ  Qt$ = CHR$(34)π  Prefix$ = "G" + Qt$ππ  CurrentPage = 1π  Work$ = Prefix$π  CurrentBit = 0π  Char = 0ππ  ' extract base filename from input filenameπ  InFileBase$ = ""π  FOR I = LEN(InFileName$) TO 1 STEP -1π    ThisChar$ = MID$(InFileName$, I, 1)π    SELECT CASE ThisChar$π      CASE "\", ":", " "π        EXIT FORπ      CASE ELSEπ        InFileBase$ = ThisChar$ + InFileBase$π    END SELECTπ  NEXTππ  ' Open input fileπ  InFile = FREEFILEπ  OPEN InFileName$ FOR BINARY AS #InFileπ  FileLen = LOF(InFile)ππ  ' Open output file.π  F$ = OutPrefix$ + RIGHT$(STR$(100 + CurrentPage), 2) + "." + Ext$π  OutFile = FREEFILEπ  'use 8k output buffer for a little speedπ  OPEN F$ FOR OUTPUT AS #OutFile LEN = 8192ππ  ' initialise progress with filenameπ  Dummy = ShowProgress(0, F$)ππ  'Print the first 2 lines of the loader.π  PRINT #OutFile,"CLS:?STRING$(50,178):'This file created by PostIt! "; Ver$π  PRINT #OutFile, "DEFINT A-Z:FOR A=0 TO 6:P(A)=2^A:NEXT:OPEN "; Qt$; "B"; Qt$; ",1,"; Qt$; InFileBase$; Qt$π  PRINT #OutFile,"T$=";Qt$;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789()"; Qt$ππ  ' we've already determined the file is less than 24kπ  ' so we'll assume there's enough string space to hold itπ  Buf$ = SPACE$(FileLen)π  GET #InFile, , Buf$ππ  FOR CurrentByte = 1 TO FileLenπ    'shift the 8 bit character into the work bufferπ    Char = Char + ASC(MID$(Buf$, CurrentByte, 1)) * Shift(CurrentBit)ππ    'we've got 8 more bits nowπ    CurrentBit = CurrentBit + 8ππ    'write the 6 bit codes nowπ    DO WHILE CurrentBit > 5         'do we have at least 6 bits left?π      GOSUB PutByteπ      Char = Char \ 64              'shift it right 6 placesπ      CurrentBit = CurrentBit - 6  '6 bits less nowπ    LOOPπ  NEXTππ  'flush the input buffer if it contains any bitsπ  IF CurrentBit > 0 THEN GOSUB PutByteππ  'flush the line buffer if it contains any charactersπ  'Add a CHR$(34) to it just in case a mail reader decides to addπ  'some extra spaces to the end...ππ  IF LEN(Work$) > 2 THENπ    TheLine$ = Work$ + Qt$π    GOSUB PrintLineπ  END IFππ  ' main loader by Rich Geldreich with mods by Jim Giordianoπ  TheLine$ = "N=" + LTRIM$(STR$(FileLen)) + ":K=255:IF LEN(C$)<>"π  TheLine$ = TheLine$ + LTRIM$(STR$(BytesOut)) + " THEN ?" + Qt$π  TheLine$ = TheLine$ + "Incomplete script file!" + Qt$ + ":BEEP:END"π  GOSUB PrintLineππ  TheLine$ = "FOR A=1 TO N:LOCATE 1:?STRING$(50*(A/N),177):IF L=0"π  TheLine$ = TheLine$ + " THEN GOSUB G:L=6"π  GOSUB PrintLineππ  TheLine$ = "W=T\P(6-L):GOSUB G:W=W OR T*P(L):L=L-2:B$=CHR$(W AND"π  TheLine$ = TheLine$ + " K):PUT 1,,B$:NEXT"π  GOSUB PrintLineππ  TheLine$="?:IF C<>" + LTRIM$(STR$(CheckSum)) + " THEN ?" + Qt$ + "Bad"π  TheLine$ = TheLine$ + " checksum!" + Qt$ + ":BEEP:END ELSE ?" + Qt$π  TheLine$ = TheLine$ + "Success!" + Qt$ + ":END"π  GOSUB PrintLineππ  TheLine$ = "G:I=I+1:T=INSTR(T$,MID$(C$,I,1))-1:C=(C+T)*2:C=C\256+(C"π  TheLine$ = TheLine$ + " AND K):RETURN"π  GOSUB PrintLineππ  TheLine$ = "SUB G(A$):SHARED C$:C$=C$+LEFT$(A$," + LTRIM$(STR$(LineLength - 2))π  TheLine$ = TheLine$ + "):END SUB"π  GOSUB PrintLineππFinish:π  CLOSE #InFile, #OutFileππ  IF UserAbort = 0 THEN Dummy = ShowProgress(100, F$)ππ  EXIT SUBππPutByte:π  'write out the first 6 bitsπ  BytesOut = BytesOut + 1ππ  TheByte = Char AND 63π  'translate the output character into something safeπ  Work$ = Work$ + MID$(ValidChars$, TheByte + 1, 1)ππ  'calculate a checksum on the encoded data streamπ  CheckSum = (CheckSum + TheByte) * 2π  CheckSum = CheckSum \ 256 + (CheckSum AND 255)ππ  'if we have a complete line then write it outπ  IF LEN(Work$) = LineLength THENπ    TheLine$ = Work$π    GOSUB PrintLineπ    IF UserAbort THEN GOTO Finishπ    Work$ = Prefix$π  END IFπ  RETURNππPrintLine:π  UserAbort = ShowProgress(100& * CurrentByte \ FileLen, F$)π  ' don't just goto abort - we have to clean up gosub firstπ  IF UserAbort THEN RETURNππ  IF NewFileFlag THENπ    NewFileFlag = 0π    CurrentPage = CurrentPage + 1π    PRINT #OutFile, "'>>> Continued on Page "; CurrentPageπ    CLOSE #OutFileππ    F$ = OutPrefix$ + RIGHT$(STR$(100 + CurrentPage), 2) + "." + Ext$π    OPEN F$ FOR OUTPUT AS #OutFile LEN = 8192π    PRINT #OutFile, "'>>> Start of Page "; CurrentPage; " of "; InFileBase$π    LinesOut = 1π  END IFππ  PRINT #OutFile, TheLine$; " "π  LinesOut = LinesOut + 1π  IF LinesOut >= LPP THEN NewFileFlag = -1ππ  RETURNππEND SUBππFUNCTION ShowProgress (Percent, CurFile$)π  SHARED Abortππ  ' update status displayπ  lblCurFile.Caption = CurFile$π  lblPct.Caption = STR$(Percent) + "%"π  lblBar.Caption = STRING$(Percent \ 4, 177)ππ  ' return abort status (set TRUE in cmdAbort event)π  Dummy = DOEVENTS()π  ShowProgress = AbortπEND FUNCTIONπDouglas Lusher                 CLOCK SET                      FidoNet QUIK_BAS Echo          11-01-94 (00:00)       QB, QBasic, PDS        234  7102     CLOCKSET.BAS'Well, here we are at daylight saving time again. Thought Iπ'would repost this bit of code to set the time and date inπ'a computer by calling the NIST (National Institute ofπ'Standards and Technology) and obtaining the correct valuesπ'from their atomic clock. Just a note for those of you whoπ'may have gotten this code from when I have posted it inπ'the past: this is an updated version, there were a coupleπ'of subtle bugs in the previously posted versions.ππ DEFINT A-Zπ CONST False = 0, True = NOT Falseπ CONST Modem = 1ππ TimeOut$ = "*** Time limit exceeded, program aborted"π Abort$ = "*** Program aborted from keyboard"ππ PhoneNumber$ = "1-303-494-4774"π 'this is the phone number for the National Institute for Standardsπ 'and Technology in Colorado. It's the number I use for settingπ 'my computer's clock, so the rest of the program is written to useπ 'it. Listed below are some other numbers that you can call byπ 'modem for the same purpose, but I don't know anything about theπ 'service and info they provide.ππ 'PhoneNumber$ = "1-202-653-0351"π 'the United States Naval Observatory in Anapolis, Marylandππ 'PhoneNumber$ = "07-2217033"         ' Brisbane, Australiaπ 'PhoneNumber$ = "03-6001641"         ' Melbourne, Australiaππ ComSpec$ = "COM1:1200,N,8,1,BIN,CS0,DS0"π 'Change this ComSpec$ if your modem is on a different serial port.π '1200 baud and 300 baud are the only speeds available at NISTππ ON ERROR GOTO HandleErrorπ WIDTH 80π PRINTπ PRINT "CLOCKSET.BAS"π PRINT "A program to set the clock/calendar of an IBM compatible"π PRINT "computer after obtaining the correct date and time via modem."π PRINT "Written by Douglas H. Lusher, 11-01-1994"π PRINTπ PRINT "Time Zone? <E>astern, <C>entral, <M>ountain, <P>acific: ";π DOπ   LOCATE , , 1: Ky$ = INPUT$(1): LOCATE , , 0π   IF Ky$ = CHR$(27) THEN PRINT : PRINT Abort$: ENDπ   Ky$ = UCASE$(Ky$)π   TZ% = INSTR("ECMP", Ky$)π   IF TZ% THEN PRINT Ky$: TZ% = TZ% + 4: EXIT DOπ   BEEPπ LOOPπ 'If you require other time zones, the above code will haveπ 'to be altered. For Alaska, TZ% must be set equal to 9.π 'For Hawaii, set TZ% equal to 11.ππ PRINT "Daylight Savings Time? <Y>es, <N>o: ";π DOπ   LOCATE , , 1: Ky$ = INPUT$(1): LOCATE , , 0π   IF Ky$ = CHR$(27) THEN PRINT : PRINT Abort$: ENDπ   Ky$ = UCASE$(Ky$)π   IF Ky$ = "Y" OR Ky$ = "N" THEN PRINT Ky$: EXIT DOπ   BEEPπ LOOPπ IF Ky$ = "Y" THEN TZ% = TZ% - 1ππ Abort% = Falseπ OPEN ComSpec$ FOR RANDOM AS #Modemπ PRINT #Modem, "ATZ"π Start! = TIMERπ DOπ   IF LineReceived(ModemInput$) THENπ     IF INSTR(ModemInput$, "OK") THEN EXIT DOπ   ELSEIF INKEY$ = CHR$(27) THENπ     PRINT : PRINT Abort$: Abort% = True: EXIT DOπ   ELSEIF TimeSince!(Start!) > 20 THENπ     PRINT : PRINT TimeOut$: Abort% = True: EXIT DOπ   END IFπ LOOPππ IF Abort% THEN GOTO ProgramEndππ SLEEP (3)π PRINT #Modem, "ATDT"; PhoneNumber$π Start! = TIMERπ DOπ   IF LineReceived(ModemInput$) THENπ     IF INSTR(ModemInput$, "CONNECT") THENπ       EXIT DOπ     ELSEIF INSTR(ModemInput$, "BUSY") THENπ       Abort% = True: EXIT DOπ     ELSEIF INSTR(ModemInput$, "NO CARRIER") THENπ       Abort% = True: EXIT DOπ     ELSEIF INSTR(ModemInput$, "ERROR") THENπ       Abort% = True: EXIT DOπ     END IFπ   ELSEIF INKEY$ = CHR$(27) THENπ     PRINT : PRINT Abort$: Abort% = True: EXIT DOπ   ELSEIF TimeSince!(Start!) > 30 THENπ     PRINT : PRINT TimeOut$: Abort% = True: EXIT DOπ   END IFπ LOOPππ IF Abort% THEN GOTO ProgramEndππ Start! = TIMERπ LineCount% = 0π DOπ   IF LineReceived(ModemInput$) THENπ     'discard the first few lines to allow the connectionπ     '  to stabilizeπ     LineCount% = LineCount% + 1π     IF LineCount% > 10 THENπ       GOSUB SetClockπ       IF ClockSet% THEN EXIT DOπ     ELSEIF INSTR(ModemInput$, "NO CARRIER") THENπ       EXIT DOπ     ELSEIF INSTR(ModemInput$, "ERROR") THENπ       EXIT DOπ     END IFπ   ELSEIF INKEY$ = CHR$(27) THENπ     PRINT : PRINT Abort$: EXIT DOπ   ELSEIF TimeSince!(Start!) > 30 THENπ     PRINT : PRINT TimeOut$: EXIT DOπ   END IFπ LOOPππ ProgramEnd:π PRINT #Modem, "+++";π Start! = TIMERπ DO UNTIL TimeSince!(Start!) > 2: LOOPπ PRINT #Modem, "ATH0"π Start! = TIMERπ DOπ   IF LineReceived(ModemInput$) THENπ     IF INSTR(ModemInput$, "OK") THEN EXIT DOπ   ELSEIF TimeSince!(Start!) > 20 THENπ     EXIT DOπ   END IFπ LOOPπ CLOSE #Modemπ ENDππ SetClock:π 'lines containing the date and time info areπ '50 characters long and end with a "*" or "#"π IF LEN(ModemInput$) <> 50 THENπ   ClockSet% = False: RETURNπ END IFπ IF MID$(ModemInput$, 50) <> "*" AND MID$(ModemInput$, 50) <> "#" THENπ   ClockSet% = False: RETURNπ END IFπ 'get the date info from the lineπ D$ = MID$(ModemInput$, 10, 5) + "-19" + MID$(ModemInput$, 7, 2)π IF VAL(MID$(ModemInput$, 7, 2)) < 94 THEN MID$(D$, 7, 2) = "20"π 'get the time infoπ T$ = MID$(ModemInput$, 16, 8)π 'alter the time for the desired time zoneπ Hour% = VAL(T$) - TZ%π IF Hour% < 0 THENπ   'some adjustments will be necessaryπ   Hour% = Hour% + 24π   Day% = VAL(MID$(D$, 4, 2)) - 1π   IF Day% = 0 THENπ     Month% = VAL(MID$(D$, 1, 2)) - 1π     SELECT CASE Month%π       CASE 0π         Day% = 31π         Month% = 12π         Year% = VAL(MID$(D$, 7, 4)) - 1π         MID$(D$, 7, 4) = RIGHT$(STR$(Year%), 4)π       CASE 1, 3, 5, 7, 8, 10π         Day% = 31π       CASE 4, 6, 9, 11π         Day% = 30π       CASE 2π         Day% = 28π         Year% = VAL(MID$(D$, 7, 4))π         IF LeapYear(Year%) THEN Day% = 29π     END SELECTπ     MID$(D$, 1, 2) = RIGHT$(STR$(Month% + 100), 2)π   END IFπ   MID$(D$, 4, 2) = RIGHT$(STR$(Day% + 100), 2)π END IFπ MID$(T$, 1, 2) = RIGHT$(STR$(Hour% + 100), 2)π PRINT STRING$(58, "*")π PRINT "  Current settings: Date: "; DATE$, "Time: "; TIME$π DATE$ = D$: TIME$ = T$π PRINT "      Corrected to: Date: "; DATE$, "Time: "; TIME$π PRINT STRING$(58, "*"): PRINTπ ClockSet% = Trueπ RETURNππ HandleError:π ErrCode% = ERRπ IF ErrCode% = 57 THENπ   Err57% = Err57% + 1π   IF Err57% <= 5 THENπ     RESUMEπ   ELSEπ     PRINT "Program terminated; too many I/O errors."π     RESUME ProgramEndπ   END IFπ ELSEπ   PRINT "ERROR:"; ErrCode%; "- Program terminated."π   RESUME ProgramEndπ END IFππ FUNCTION LeapYear% (Year%) STATICπ 'returns True (-1) if the specified year is a leap yearπ   LY% = (Year% MOD 4 = 0) AND (Year% MOD 100 <> 0)π   LY% = LY% OR (Year% MOD 400 = 0)π   LeapYear% = LY%π END FUNCTIONππ FUNCTION LineReceived (Received$) STATICπ   CRLF$ = CHR$(13) + CHR$(10)π   LineReceived = Falseπ   IF LOC(Modem) THENπ     NewChars$ = INPUT$(LOC(Modem), #Modem)π     PRINT NewChars$;π     Buffer$ = Buffer$ + NewChars$π     LineEnd% = INSTR(Buffer$, CRLF$)π     IF LineEnd% THENπ       Received$ = LEFT$(Buffer$, LineEnd% - 1)π       Buffer$ = MID$(Buffer$, LineEnd% + 2)π       LineReceived = Trueπ     END IFπ   END IFπ END FUNCTIONππ FUNCTION TimeSince! (Mark!)π   TimeNow! = TIMERπ   TimeSince! = (TimeNow! - ((TimeNow! < Mark!) * 86400)) - Mark!π END FUNCTIONπSteve M. Wiegand               CALCULATE DAY OF WEEK          stevewie@ksc9.th.com           04-21-96 (16:23)       QB, QBasic, PDS        729  28534    DAYOWEEK.BAS'This program will calculate a day of the week for any year from 1753 to 2030ππDEFINT A-ZπDECLARE SUB TRANSLATE ()πDECLARE SUB LETTERS ()πDECLARE SUB LAYER1 ()πDECLARE SUB NORMAL1 ()πDECLARE SUB NORMAL0 ()πDECLARE SUB Initialize ()πDECLARE SUB FancyCls (dots%, Background%)πDECLARE SUB Center (Row%, text$)πDECLARE SUB OPENINTRO ()πDECLARE SUB Box (Row1%, Col1%, Row2%, Col2%)πDECLARE SUB PAUSE ()πDECLARE SUB DAYERROR ()πDECLARE SUB inputerror ()πDECLARE FUNCTION GetNum# (Row%, Col%)πCONST TRUE = -1πCONST FLASE = NOT TRUEπCONST BYEAR = 1753πCOMMON SHARED P$(), P$, SIZE$πCOMMON SHARED C1$, C2$, C3$πCOMMON SHARED C4$, BGC, DOT$πCOMMON SHARED SPACING$, Word$πCOMMON SHARED PFT, PFLπCOMMON SHARED m, d, y, nt%πDIM P$(122)πDIM SHARED ColorprefπDIM SHARED Colors(0 TO 20, 1 TO 4)πDIM SHARED year%(278)πDIM SHARED M1%(12), M2%(12), M3%(12), M4%(12), M5%(12), M6%(12), M7%(12)πDIM SHARED M8%(12), M9%(12), M10%(12), M11%(12), M12%(12), M13%(12), M14%(12)πDIM SHARED d1%(31), d2%(31), d3%(31), d4%(31), d5%(31), d6%(31), d7%(31)πDIM SHARED dn$(7)πDIM SHARED mn$(12): DIM SHARED mnu%(12)πCALL LETTERS                                'CALL LETTERSETπ'π' Begin Mainline Codeπ'πInitializeπOPENINTROπBEGIN:πColorpref = 1πFancyCls Colors(2, Colorpref), Colors(1, Colorpref)πBox 9, 19, 15, 61πCOLOR 7, 0πCenter 11, "Enter the Century and Year (CCYY)"πnt% = 1πy = GetNum#(13, 38)πFancyCls Colors(2, Colorpref), Colors(1, Colorpref)πBox 9, 19, 15, 61πCOLOR 7, 0πCenter 11, "Enter the Month of the Year (01-12)"πnt% = 2πm = GetNum#(13, 39)πFancyCls Colors(2, Colorpref), Colors(1, Colorpref)πBox 9, 19, 15, 61πCOLOR 7, 0πCenter 11, "Enter the Day of the Month (01-31)"πnt% = 3πd = GetNum#(13, 39)πDATEEDIT:πIF m = 2 THENπ   z% = y MOD 4π   IF z% = 0 THENπ       mnu%(2) = 29π   END IFπEND IFπIF d > mnu%(m) THENπ    CALL DAYERRORπ    CALL PAUSEπ    GOTO doagainπEND IFπINDEX1 = (y - BYEAR) + 1πINDEX2 = year%(INDEX1)πSELECT CASE INDEX2π    CASE IS = 1π        index3 = M1%(m)π    CASE IS = 2π        index3 = M2%(m)π    CASE IS = 3π        index3 = M3%(m)π    CASE IS = 4π        index3 = M4%(m)π    CASE IS = 5π        index3 = M5%(m)π    CASE IS = 6π        index3 = M6%(m)π    CASE IS = 7π        index3 = M7%(m)π    CASE IS = 8π        index3 = M8%(m)π    CASE IS = 9π        index3 = M9%(m)π    CASE IS = 10π        index3 = M10%(m)π    CASE IS = 11π        index3 = M11%(m)π    CASE IS = 12π        index3 = M12%(m)π    CASE IS = 13π        index3 = M13%(m)π    CASE IS = 14π        index3 = M14%(m)πEND SELECTπSELECT CASE index3π    CASE IS = 1π        bd% = d1%(d)π    CASE IS = 2π        bd% = d2%(d)π    CASE IS = 3π        bd% = d3%(d)π    CASE IS = 4π        bd% = d4%(d)π    CASE IS = 5π        bd% = d5%(d)π    CASE IS = 6π        bd% = d6%(d)π    CASE IS = 7π        bd% = d7%(d)πEND SELECTπFancyCls Colors(2, Colorpref), Colors(1, Colorpref)πBox 9, 19, 15, 61πCOLOR 7, 0πIF bd% > 7 OR bd% < 0 THENπ   LOCATE 10, 20, 0π   PRINT "Calculation Error - bd%"π   LOCATE 11, 41, 0π   PRINT bd%π   GOTO finishπEND IFπz1$ = mn$(m): z2$ = STR$(d): z3$ = STR$(y): z4$ = z1$ + " " + z2$ + z3$πA$ = "The date entered is a " + dn$(bd%)πCenter 10, z4$πCenter 12, A$πA$ = ""πPAUSEπdoagain:πFancyCls Colors(2, Colorpref), Colors(1, Colorpref)πBox 9, 19, 15, 61πCOLOR 7, 0πCenter 12, "Do another date ? [Y/N]"πLOCATE 14, 40, 1πWHILE INKEY$ <> "": WENDπDOπ   kbd$ = UCASE$(INKEY$)πLOOP UNTIL kbd$ = "Y" OR kbd$ = "N"πIF kbd$ = "Y" THENπ   mnu%(2) = 28π   GOTO BEGINπEND IFπCLSπSYSTEMπfinish:πENDππ'The following data defines the color schemes available via the main menu.π'π'    scrn  dots  bar  back   title  shdow  choice  curs   cursbk  shdowπDATA 0,    7,    15,  7,     0,     7,     0,      15,    0,      0πDATA 1,    9,    12,  3,     0,     1,     15,     0,     7,      0πDATA 3,    15,   13,  1,     14,    3,     15,     0,     7,      0πDATA 7,    12,   15,  4,     14,    0,     15,     15,    1,      0ππ'Box:π'  Draw a box on the screen between the given coordinates.πSUB Box (Row1, Col1, Row2, Col2) STATICπ    COLOR 14, 0π    BoxWidth = Col2 - Col1 + 1ππ    LOCATE Row1, Col1π    PRINT "┌"; STRING$(BoxWidth - 2, "─"); "┐";ππ    FOR A = Row1 + 1 TO Row2 - 1π        LOCATE A, Col1π        PRINT "│"; SPACE$(BoxWidth - 2); "│";π    NEXT Aππ    LOCATE Row2, Col1π    PRINT "└"; STRING$(BoxWidth - 2, "─"); "┘";ππEND SUBππDEFSNG A-Zπ'Center:π'  Center text on the given row.πSUB Center (Row%, text$)πDEFINT A-Zπ    LOCATE Row, 41 - LEN(text$) / 2π    PRINT text$;πEND SUBππSUB DAYERRORπz1$ = STR$(m)πz2$ = STR$(d)πz3$ = STR$(y)πLINE (158, 235)-(390, 249), 7, BπLINE (159, 236)-(389, 248), 15, BFπWord$ = "              " + z1$ + "/" + z2$ + "/" + z3$πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 245: PFL = 163: CALL NORMAL1πLINE (158, 262)-(390, 274), 7, BπLINE (159, 263)-(389, 273), 15, BFπWord$ = "The day of the month is invalid"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 272: PFL = 163: CALL NORMAL1πLINE (158, 279)-(415, 291), 7, BπLINE (159, 280)-(414, 290), 15, BFπx$ = STR$(mnu%(m))πWord$ = "The month you selected has " + x$ + " days"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 289: PFL = 163: CALL NORMAL1πLEAPYRERROR:πIF m < 2 OR m > 2 THENπ        GOTO exitsubπEND IFπIF d > 29 THENπ        GOTO exitsubπEND IFπLINE (158, 296)-(415, 308), 7, BπLINE (159, 297)-(414, 307), 15, BFπWord$ = "The year is not a leap year"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 306: PFL = 163: CALL NORMAL1ππexitsub:πEND SUBππDEFSNG A-Zπ'FancyCls:π'  Clears screen in the right color, and draws nice dots.πSUB FancyCls (dots%, Background%)πDEFINT A-Zπ    VIEW PRINT 7 TO 25π    COLOR dots, Backgroundπ    CLS 2ππ    FOR A = 560 TO 1820 STEP 45π        Row = A / 80 + 1π        Col = A MOD 80 + 1π        LOCATE Row, Colπ        PRINT CHR$(250);π    NEXT AπEND SUBππ'GetNum:π'  Gets valid numeric input from userπ'Parameters:π'  Row, Col - location to echo inputπFUNCTION GetNum# (Row, Col)π  result$ = ""π  Done = FALSEπ  WHILE INKEY$ <> "": WEND   'Clear keyboard bufferππ  DO WHILE NOT Doneππ    LOCATE Row, Colπ    PRINT result$; CHR$(95); "    ";π    π    kbd$ = INKEY$π    SELECT CASE kbd$π      CASE "0" TO "9"π        result$ = result$ + kbd$π      CASE "."π        IF INSTR(result$, ".") = 0 THENπ          result$ = result$ + kbd$π        END IFπ      CASE CHR$(13)π        IF (VAL(result$) > 2030 OR VAL(result$) < 1753) AND nt% = 1 THENπ          result$ = ""π            CALL inputerrorπ        ELSEπ        IF (VAL(result$) > 12 OR VAL(result$) < 1) AND nt% = 2 THENπ          result$ = ""π          CALL inputerrorπ        ELSEπ        IF (VAL(result$) > 31 OR VAL(result$) < 1) AND nt% = 3 THENπ          result$ = ""π          CALL inputerrorπ        ELSEπ          Done = TRUEπ        END IFπ         END IFπ          END IFπ       π      CASE CHR$(8)π        IF LEN(result$) > 0 THENπ          result$ = LEFT$(result$, LEN(result$) - 1)π        END IFπ      CASE ELSEπ        IF LEN(kbd$) > 0 THENπ          BEEPπ        END IFπ      END SELECTπ  LOOPππ  LOCATE Row, Colπ  PRINT result$; " ";ππ  GetNum# = VAL(result$)π'πEND FUNCTIONππ'Initialize:π'  Read colors in and set up assembly routinesπSUB Initializeπyear%(1) = 1: year%(2) = 2: year%(3) = 3: year%(4) = 11: year%(5) = 6: year%(6) = 7πyear%(7) = 1: year%(8) = 9: year%(9) = 4: year%(10) = 5: year%(11) = 6: year%(12) = 14πyear%(13) = 2: year%(14) = 3: year%(15) = 4: year%(16) = 12: year%(17) = 7: year%(18) = 1πyear%(19) = 2: year%(20) = 10: year%(21) = 5: year%(22) = 6: year%(23) = 7: year%(24) = 8πyear%(25) = 3: year%(26) = 4: year%(27) = 5: year%(28) = 13: year%(29) = 1: year%(30) = 2πyear%(31) = 3: year%(32) = 11: year%(33) = 6: year%(34) = 7: year%(35) = 1: year%(36) = 9πyear%(37) = 4: year%(38) = 5: year%(39) = 6: year%(40) = 14: year%(41) = 2: year%(42) = 3πyear%(43) = 4: year%(44) = 12: year%(45) = 7: year%(46) = 1: year%(47) = 2: year%(48) = 3πyear%(49) = 4: year%(50) = 5: year%(51) = 6: year%(52) = 14: year%(53) = 2: year%(54) = 3πyear%(55) = 4: year%(56) = 12: year%(57) = 7: year%(58) = 1: year%(59) = 2: year%(60) = 10πyear%(61) = 5: year%(62) = 6: year%(63) = 7: year%(64) = 8: year%(65) = 3: year%(66) = 4πyear%(67) = 5: year%(68) = 13: year%(69) = 1: year%(70) = 2: year%(71) = 3: year%(72) = 11πyear%(73) = 6: year%(74) = 7: year%(75) = 1: year%(76) = 9: year%(77) = 4: year%(78) = 5πyear%(79) = 6: year%(80) = 14: year%(81) = 2: year%(82) = 3: year%(83) = 4: year%(84) = 12πyear%(85) = 7: year%(86) = 1: year%(87) = 2: year%(88) = 10: year%(89) = 5: year%(90) = 6πyear%(91) = 7: year%(92) = 8: year%(93) = 3: year%(94) = 4: year%(95) = 5: year%(96) = 13πyear%(97) = 1: year%(98) = 2: year%(99) = 3: year%(100) = 11: year%(101) = 6: year%(102) = 7πyear%(103) = 1: year%(104) = 9: year%(105) = 4: year%(106) = 5: year%(107) = 6: year%(108) = 14πyear%(109) = 2: year%(110) = 3: year%(111) = 4: year%(112) = 12: year%(113) = 7: year%(114) = 1πyear%(115) = 2: year%(116) = 10: year%(117) = 5: year%(118) = 6: year%(119) = 7: year%(120) = 8πyear%(121) = 3: year%(122) = 4: year%(123) = 5: year%(124) = 13: year%(125) = 1: year%(126) = 2πyear%(127) = 3: year%(128) = 11: year%(129) = 6: year%(130) = 7: year%(131) = 1: year%(132) = 9πyear%(133) = 4: year%(134) = 5: year%(135) = 6: year%(136) = 14: year%(137) = 2: year%(138) = 3πyear%(139) = 4: year%(140) = 12: year%(141) = 7: year%(142) = 1: year%(143) = 2: year%(144) = 10πyear%(145) = 5: year%(146) = 6: year%(147) = 7: year%(148) = 1: year%(149) = 2: year%(150) = 3πyear%(151) = 4: year%(152) = 12: year%(153) = 7: year%(154) = 1: year%(155) = 2: year%(156) = 10πyear%(157) = 5: year%(158) = 6: year%(159) = 7: year%(160) = 8: year%(161) = 3: year%(162) = 4πyear%(163) = 5: year%(164) = 13: year%(165) = 1: year%(166) = 2: year%(167) = 3: year%(168) = 11πyear%(169) = 6: year%(170) = 7: year%(171) = 1: year%(172) = 9: year%(173) = 4: year%(174) = 5πyear%(175) = 6: year%(176) = 14: year%(177) = 2: year%(178) = 3: year%(179) = 4: year%(180) = 12πyear%(181) = 7: year%(182) = 1: year%(183) = 2: year%(184) = 10: year%(185) = 5: year%(186) = 6πyear%(187) = 7: year%(188) = 8: year%(189) = 3: year%(190) = 4: year%(191) = 5: year%(192) = 13πyear%(193) = 1: year%(194) = 2: year%(195) = 3: year%(196) = 11: year%(197) = 6: year%(198) = 7πyear%(199) = 1: year%(200) = 9: year%(201) = 4: year%(202) = 5: year%(203) = 6: year%(204) = 14πyear%(205) = 2: year%(206) = 3: year%(207) = 4: year%(208) = 12: year%(209) = 7: year%(210) = 1πyear%(211) = 2: year%(212) = 10: year%(213) = 5: year%(214) = 6: year%(215) = 7: year%(216) = 8πyear%(217) = 3: year%(218) = 4: year%(219) = 5: year%(220) = 13: year%(221) = 1: year%(222) = 2πyear%(223) = 3: year%(224) = 11: year%(225) = 6: year%(226) = 7: year%(227) = 1: year%(228) = 9πyear%(229) = 4: year%(230) = 5: year%(231) = 6: year%(232) = 14: year%(233) = 2: year%(234) = 3πyear%(235) = 4: year%(236) = 12: year%(237) = 7: year%(238) = 1: year%(239) = 2: year%(240) = 10πyear%(241) = 5: year%(242) = 6: year%(243) = 7: year%(244) = 8: year%(245) = 3: year%(246) = 4πyear%(247) = 5: year%(248) = 13: year%(249) = 1: year%(250) = 2: year%(251) = 3: year%(252) = 11πyear%(253) = 6: year%(254) = 7: year%(255) = 1: year%(256) = 9: year%(257) = 4: year%(258) = 5πyear%(259) = 6: year%(260) = 14: year%(261) = 2: year%(262) = 3: year%(263) = 4: year%(264) = 12πyear%(265) = 7: year%(266) = 1: year%(267) = 2: year%(268) = 10: year%(269) = 5: year%(270) = 6πyear%(271) = 7: year%(272) = 8: year%(273) = 3: year%(274) = 4: year%(275) = 5: year%(276) = 13πyear%(277) = 1: year%(278) = 2πM1%(1) = 1: M1%(2) = 4: M1%(3) = 4: M1%(4) = 7: M1%(5) = 2: M1%(6) = 5πM1%(7) = 7: M1%(8) = 3: M1%(9) = 6: M1%(10) = 1: M1%(11) = 4: M1%(12) = 6πM2%(1) = 2: M2%(2) = 5: M2%(3) = 5: M2%(4) = 1: M2%(5) = 3: M2%(6) = 6πM2%(7) = 1: M2%(8) = 4: M2%(9) = 7: M2%(10) = 2: M2%(11) = 5: M2%(12) = 7πM3%(1) = 3: M3%(2) = 6: M3%(3) = 6: M3%(4) = 2: M3%(5) = 4: M3%(6) = 7πM3%(7) = 2: M3%(8) = 5: M3%(9) = 1: M3%(10) = 3: M3%(11) = 6: M3%(12) = 1πM4%(1) = 4: M4%(2) = 7: M4%(3) = 7: M4%(4) = 3: M4%(5) = 5: M4%(6) = 1πM4%(7) = 3: M4%(8) = 6: M4%(9) = 2: M4%(10) = 4: M4%(11) = 7: M4%(12) = 2πM5%(1) = 5: M5%(2) = 1: M5%(3) = 1: M5%(4) = 4: M5%(5) = 6: M5%(6) = 2πM5%(7) = 4: M5%(8) = 7: M5%(9) = 3: M5%(10) = 5: M5%(11) = 1: M5%(12) = 3πM6%(1) = 6: M6%(2) = 2: M6%(3) = 2: M6%(4) = 5: M6%(5) = 7: M6%(6) = 3πM6%(7) = 5: M6%(8) = 1: M6%(9) = 4: M6%(10) = 6: M6%(11) = 2: M6%(12) = 4πM7%(1) = 7: M7%(2) = 3: M7%(3) = 3: M7%(4) = 6: M7%(5) = 1: M7%(6) = 4πM7%(7) = 6: M7%(8) = 2: M7%(9) = 5: M7%(10) = 7: M7%(11) = 3: M7%(12) = 5πM8%(1) = 1: M8%(2) = 4: M8%(3) = 5: M8%(4) = 1: M8%(5) = 3: M8%(6) = 6πM8%(7) = 1: M8%(8) = 4: M8%(9) = 7: M8%(10) = 2: M8%(11) = 5: M8%(12) = 7πM9%(1) = 2: M9%(2) = 5: M9%(3) = 6: M9%(4) = 2: M9%(5) = 4: M9%(6) = 7πM9%(7) = 2: M9%(8) = 5: M9%(9) = 1: M9%(10) = 3: M9%(11) = 6: M9%(12) = 1πM10%(1) = 3: M10%(2) = 6: M10%(3) = 7: M10%(4) = 3: M10%(5) = 5: M10%(6) = 1πM10%(7) = 3: M10%(8) = 6: M10%(9) = 2: M10%(10) = 4: M10%(11) = 7: M10%(12) = 2πM11%(1) = 4: M11%(2) = 7: M11%(3) = 1: M11%(4) = 4: M11%(5) = 6: M11%(6) = 2πM11%(7) = 4: M11%(8) = 7: M11%(9) = 3: M11%(10) = 5: M11%(11) = 1: M11%(12) = 3πM12%(1) = 5: M12%(2) = 1: M12%(3) = 2: M12%(4) = 5: M12%(5) = 7: M12%(6) = 3πM12%(7) = 5: M12%(8) = 1: M12%(9) = 4: M12%(10) = 6: M12%(11) = 2: M12%(12) = 4πM13%(1) = 6: M13%(2) = 2: M13%(3) = 3: M13%(4) = 6: M13%(5) = 1: M13%(6) = 4πM13%(7) = 6: M13%(8) = 2: M13%(9) = 5: M13%(10) = 7: M13%(11) = 3: M13%(12) = 5πM14%(1) = 7: M14%(2) = 3: M14%(3) = 4: M14%(4) = 7: M14%(5) = 2: M14%(6) = 5πM14%(7) = 7: M14%(8) = 3: M14%(9) = 6: M14%(10) = 1: M14%(11) = 4: M14%(12) = 6πdn$(1) = "MONDAY   ": dn$(2) = "TUESDAY  ": dn$(3) = "WEDNESDAY": dn$(4) = "THURSDAY ": dn$(5) = "FRIDAY   ": dn$(6) = "SATURDAY ": dn$(7) = "SUNDAY"πd1%(1) = 1: d1%(2) = 2: d1%(3) = 3: d1%(4) = 4: d1%(5) = 5: d1%(6) = 6:πd1%(7) = 7: d1%(8) = 1: d1%(9) = 2: d1%(10) = 3πd1%(11) = 4: d1%(12) = 5: d1%(13) = 6: d1%(14) = 7: d1%(15) = 1: d1%(16) = 2: d1%(17) = 3: d1%(18) = 4: d1%(19) = 5: d1%(20) = 6πd1%(21) = 7: d1%(22) = 1: d1%(23) = 2: d1%(24) = 3: d1%(25) = 4: d1%(26) = 5: d1%(27) = 6: d1%(28) = 7: d1%(29) = 1: d1%(30) = 2πd1%(31) = 3πd2%(1) = 2: d2%(2) = 3: d2%(3) = 4: d2%(4) = 5: d2%(5) = 6: d2%(6) = 7: d2%(7) = 1: d2%(8) = 2: d2%(9) = 3: d2%(10) = 4πd2%(11) = 5: d2%(12) = 6: d2%(13) = 7: d2%(14) = 1: d2%(15) = 2: d2%(16) = 3: d2%(17) = 4: d2%(18) = 5: d2%(19) = 6: d2%(20) = 7πd2%(21) = 1: d2%(22) = 2: d2%(23) = 3: d2%(24) = 4: d2%(25) = 5: d2%(26) = 6: d2%(27) = 7: d2%(28) = 1: d2%(29) = 2: d2%(30) = 3πd2%(31) = 4πd3%(1) = 3: d3%(2) = 4: d3%(3) = 5: d3%(4) = 6: d3%(5) = 7: d3%(6) = 1: d3%(7) = 2: d3%(8) = 3: d3%(9) = 4: d3%(10) = 5πd3%(11) = 6: d3%(12) = 7: d3%(13) = 1: d3%(14) = 2: d3%(15) = 3: d3%(16) = 4: d3%(17) = 5: d3%(18) = 6: d3%(19) = 7: d3%(20) = 1πd3%(21) = 2: d3%(22) = 3: d3%(23) = 4: d3%(24) = 5: d3%(25) = 6: d3%(26) = 7: d3%(27) = 1: d3%(28) = 2: d3%(29) = 3: d3%(30) = 4πd3%(31) = 5πd4%(1) = 4: d4%(2) = 5: d4%(3) = 6: d4%(4) = 7: d4%(5) = 1: d4%(6) = 2: d4%(7) = 3: d4%(8) = 4: d4%(9) = 5: d4%(10) = 6πd4%(11) = 7: d4%(12) = 1: d4%(13) = 2: d4%(14) = 3: d4%(15) = 4: d4%(16) = 5: d4%(17) = 6: d4%(18) = 7: d4%(19) = 1: d4%(20) = 2πd4%(21) = 3: d4%(22) = 4: d4%(23) = 5: d4%(24) = 6: d4%(25) = 7: d4%(26) = 1: d4%(27) = 2: d4%(28) = 3: d4%(29) = 4: d4%(30) = 5πd4%(31) = 6πd5%(1) = 5: d5%(2) = 6: d5%(3) = 7: d5%(4) = 1: d5%(5) = 2: d5%(6) = 3: d5%(7) = 4: d5%(8) = 5: d5%(9) = 6: d5%(10) = 7πd5%(11) = 1: d5%(12) = 2: d5%(13) = 3: d5%(14) = 4: d5%(15) = 5: d5%(16) = 6: d5%(17) = 7: d5%(18) = 1: d5%(19) = 2: d5%(20) = 3πd5%(21) = 4: d5%(22) = 5: d5%(23) = 6: d5%(24) = 7: d5%(25) = 1: d5%(26) = 2: d5%(27) = 3: d5%(28) = 4: d5%(29) = 5: d5%(30) = 2πd5%(31) = 7πd6%(1) = 6: d6%(2) = 7: d6%(3) = 1: d6%(4) = 2: d6%(5) = 3: d6%(6) = 4: d6%(7) = 5: d6%(8) = 6: d6%(9) = 7: d6%(10) = 1πd6%(11) = 2: d6%(12) = 3: d6%(13) = 4: d6%(14) = 5: d6%(15) = 6: d6%(16) = 7: d6%(17) = 1: d6%(18) = 2: d6%(19) = 3: d6%(20) = 4πd6%(21) = 5: d6%(22) = 6: d6%(23) = 7: d6%(24) = 1: d6%(25) = 2: d6%(26) = 3: d6%(27) = 4: d6%(28) = 5: d6%(29) = 6: d6%(30) = 7πd6%(31) = 1πd7%(1) = 7: d7%(2) = 1: d7%(3) = 2: d7%(4) = 3: d7%(5) = 4: d7%(6) = 5: d7%(7) = 6: d7%(8) = 7: d7%(9) = 1: d7%(10) = 2πd7%(11) = 3: d7%(12) = 4: d7%(13) = 5: d7%(14) = 6: d7%(15) = 7: d7%(16) = 1: d7%(17) = 2: d7%(18) = 3: d7%(19) = 4: d7%(20) = 5πd7%(21) = 6: d7%(22) = 7: d7%(23) = 1: d7%(24) = 2: d7%(25) = 3: d7%(26) = 4: d7%(27) = 5: d7%(28) = 6: d7%(29) = 7: d7%(30) = 1πd7%(31) = 2πmn$(1) = "January": mn$(2) = "February": mn$(3) = "March": mn$(4) = "April": mn$(5) = "May": mn$(6) = "June"πmn$(7) = "July": mn$(8) = "August": mn$(9) = "September": mn$(10) = "October": mn$(11) = "November": mn$(12) = "December"πmnu%(1) = 31: mnu%(2) = 28: mnu%(3) = 31: mnu%(4) = 30: mnu%(5) = 31: mnu%(6) = 30: mnu%(7) = 31: mnu%(8) = 31: mnu%(9) = 30: mnu%(10) = 31: mnu%(11) = 30: mnu%(12) = 31ππFOR ColorSet = 1 TO 4π     FOR x = 1 TO 10π            READ Colors(x, ColorSet)π     NEXT xπNEXT ColorSetππEND SUBππSUB inputerrorπLINE (158, 235)-(390, 249), 7, BπLINE (159, 236)-(389, 248), 15, BFπWord$ = "Input Error"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 245: PFL = 163: CALL NORMAL1πLINE (158, 262)-(390, 274), 7, BπLINE (159, 263)-(389, 273), 15, BFπIF nt% = 1 THENπ   Word$ = "The Year entered is invalid"πELSEIF nt% = 2 THENπ   Word$ = "The Month entered is invalid"πELSEIF nt% = 3 THENπ   Word$ = "The Day entered is invalid"πEND IFπSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 272: PFL = 163: CALL NORMAL1πLINE (158, 279)-(415, 291), 7, BπLINE (159, 280)-(414, 290), 15, BFπIF nt% = 1 THENπ    Word$ = "Valid range is 1753 - 2030"πELSEIF nt% = 2 THENπ    Word$ = "Valid range is 1 - 12"πELSEIF nt% = 3 THENπ    Word$ = "Valid range is 1 -31"πEND IFπSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 289: PFL = 163: CALL NORMAL1πLINE (158, 296)-(415, 308), 7, BπLINE (159, 297)-(414, 307), 15, BFπWord$ = "Please re-enter"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 4"πC2$ = "C12"πPFT = 306: PFL = 163: CALL NORMAL1ππEND SUBππSUB LAYER1π  PSET (PFL + 2, PFT + 5), BGC: DRAW C3$ + P$π  PSET (PFL + 0, PFT + 5), BGC: DRAW C3$ + P$π  PSET (PFL + 1, PFT + 5), BGC: DRAW C3$ + P$π  PSET (PFL + 0, PFT + 4), BGC: DRAW C3$ + P$π  PSET (PFL + 1, PFT + 2), BGC: DRAW C2$ + P$π  PSET (PFL + 2, PFT + 4), BGC: DRAW C1$ + P$π  PSET (PFL + 3, PFT + 3), BGC: DRAW C4$ + P$π  PSET (PFL + 3, PFT + 2), BGC: DRAW C2$ + P$π  PSET (PFL + 4, PFT + 4), BGC: DRAW C2$ + P$π  PSET (PFL + 5, PFT + 2), BGC: DRAW C3$ + P$π  PSET (PFL + 5, PFT + 3), BGC: DRAW C2$ + P$π  PSET (PFL + 4, PFT + 3), BGC: DRAW C1$ + P$πEND SUBππSUB LETTERSπ   P$(32) = "BR4"                                                  'SPACEπ   P$(33) = "BR1BD1U1BU2U5BD7BR3"                                  '!π   P$(34) = "BR0BU7D2BR2U2BD7BR3"                                  '"π   P$(35) = "BD1BR1U8D2L1R5L1U2D8U2L4R5BR2BD1"                     '#π   P$(36) = "BD1BR3U8D8BL3BU5U1E1R3F1BD1BL5F1R3F1D1G1L3H1BR7BD1"   '$π   P$(37) = "BD1U1E6U1BL5BD2U1R1D1L1BD4BR4R1D1L1U1BD1BR5"          '%π   P$(38) = "BR1BU2BL1E3U1H1L1G1D1F6BU1BL5BU3G2D1F1R3E3BD2BR2"     '&π   P$(39) = "BR2BU7D1G1BD5BR4"                                     ''π   P$(40) = "BR1BD1BU2U4E2G2D4F2BU1BR4"                            '(π   P$(41) = "BR2BD1BU2U4H2F2D4G2BU1BR5"                            ')π   P$(42) = "BR2BU2U6D3L2R4BL4BD2E4BL4F4BD3BR4"                    '*π   P$(43) = "BR2BD1U7D3L2R5BD3BR3"                                 '+π   P$(44) = "BD1U1R1D2G1BU3BR4"                                    ',π   P$(45) = "BR1BU3R3L3BD3BR5"                                     '-π   P$(46) = "BD1BR1L1BU1BR4"                                       '.π   P$(47) = "BR1E5G5BR7"                                           '/π   P$(48) = "BD1BU1U6E1R2F1D6G1L2H1BR6"                            '0π   P$(49) = "BD1BR2U7BL1E1D1BD6BR3"                                '1π   P$(50) = "BR1BU6E1R2F1D2G4D1R4BU1BR3"                           '2π   P$(51) = "BU6E1R2F1D2G1L2R2F1D2G1L2H1BR7"                       '3π   P$(52) = "BU3E4D8U4L4R5BD3BR3"                                  '4π   P$(53) = "BR1BU3U4R4L4D4E1R2F1D3G1L2H1BR7"                      '5π   P$(54) = "BR1BD1BU4U3E1R2F1H1L2G1D6F1R2E1U3H1L2G1BD3BR6"        '6π   P$(55) = "BR1BU7R4D3G4D1BU1BR7"                                 '7π   P$(56) = "BR1BU6E1R2F1D2G1L2R2F1D2G1L2H1U2E1H1U2BD6BR7"         '8π   P$(57) = "BR1BU4U2E1R2F1D6G1L2H1BU4F1R3BD3BR3"                  '9π   P$(58) = "BR1U1BU2U1BD4BR3"                                     ':π   P$(59) = "BD1BR1BU1U1BU2U1BD4G1BU1BR6"                          ';π   P$(60) = "BU3E3G3F3BR3"                                         '<π   P$(61) = "BU3R4BD2L4BR7BD1"                                     '=π   P$(62) = "BU6BR1F3G3BR5"                                        '>π   P$(63) = "BR1BU5U1E1R2F1D2G1D1BD2D1BU1BR3"                      '?π   P$(64) = "BD1BU1U6E1R3F1D5L2H1U2E1R1D3BD3L3H1F1R3E1BR3"         '@π   P$(65) = "BD1U7E1R3F1D3L5R5D4BR4BU1"                            'Aπ   P$(66) = "BD1U8R4F1D2G1L4R4F1D2G1L4BU1BR9"                      'Bπ   P$(67) = "BD1BU1U6E1R3F1BD6G1L3H1F1R3BR4BU1"                    'Cπ   P$(68) = "BD1U8R4F1D6G1L4BR9BU1 "                               'Dπ   P$(69) = "BD1U8R4L4D4R3L3D4R4BU1BR4"                            'Eπ   P$(70) = "BD1U8R5L5D4R4L4D4BR8BU1"                              'Fπ   P$(71) = "BD1BU1U6E1R3F1BD6G1L3H1F1R3E1U3L2R2D3BR4"             'Gπ   P$(72) = "BD1U8D4R4U4D8BR4BU1"                                  'Hπ   P$(73) = "BD1BR3U8L1R2L1D8L1R2BR4BU1"                           'Iπ   P$(74) = "BD1BU1F1R2E1U7L1R2L1D7BR5"                            'Jπ   P$(75) = "BD1BU8D8U4R1E4G4F4BR4BU1"                             'Kπ   P$(76) = "BD1BU8D8R4BU1BR4"                                     'Lπ   P$(77) = "BD1U7E1R2F1D7U7E1R2F1D7BU1BR4"                        'Mπ   P$(78) = "BD1U8F7D1U8D8BR4BU1"                                  'Nπ   P$(79) = "BD1BU1U6E1R3F1BD6G1L3H1BR5U6D6BR4"                    'Oπ   P$(80) = "BD1U8R4F1D2G1L4D4BR9BU1"                              'Pπ   P$(81) = "BD1BU1U6E1R3F1BD6G1L3H1BR5U6BL3BD5F3BG3BR7BU5"        'Qπ   P$(82) = "BD1U8R4F1D2G1L4R1F4BR4BU1"                            'Rπ   P$(83) = "BD1BU5U2E1R3F1BD2BL5F1R3F1D2G1L3H1BR9"                'Sπ   P$(84) = "BR3BD1BU8L4R6L3D8BR6BU1"                              'Tπ   P$(85) = "BD1BU1U7D7F1R3E1U7D7BR4"                              'Uπ   P$(86) = "BD1BU8D5F2D1U1E2U5D5BR5BD2"                           'Vπ   P$(87) = "BD1BU1U7D7F1R2E1U7D7F1R2E1U7D7BD1BR4BU1"              'Wπ   P$(88) = "BD1BU8D1F3E3U1D1G6D1U1E3F3D1BU1BR5"                   'Xπ   P$(89) = "BL1BU5U2D2F3E3U2D2G3D3BU1BR7"                         'Yπ   P$(90) = "BU7R5D2G5D1R5BR4BU1"                                  'Zπ   P$(91) = "BR1BD1BR3L3U8R3BR3BD7"                                '[π   P$(92) = "BU5F5BR3"                                             '\π   P$(93) = "BD1R3U8L3BR2BD7BR4"                                   ']π   P$(94) = "BR1BU5E2F2BD5BR2"                                     '^π   P$(95) = "BD1R4BU1BL2BR5"                                       '_π   P$(96) = "BR2BU7D1F1BD5BR2"                                     '`π   P$(97) = "U2E1R3U1H1L2G1E1R2F1D4G1L2H1F1BR2E1U2D3BR4BU1"        'aπ   P$(98) = "BD1U8D8R3E1U4H1L2G1D4BR8"                             'bπ   P$(99) = "BR0U4E1R2F1BD4G1L2H1F1R2E1BR4"                        'cπ   P$(100) = "U4E1R2F1H1L2G1D4F1R2E1U7D7D1BU1BR4"                  'dπ   P$(101) = "U4E1R2F1D2L4D2F1R2E1BR4"                             'eπ   P$(102) = "BR1BD1U7E1R2F1H1L2G1D3L1R3BD3BR5"                    'fπ   P$(103) = "U4E1R2F1D4G1L2H1BD3F1R2E1U3BR4"                      'gπ   P$(104) = "BU7D8U5E1R2F1D5BU1BR4"                               'hπ   P$(105) = "BR3BD1U6BU2BD7BR4"                                   'iπ   P$(106) = "BR1BD1U6BU2BD7D3G1L2BU4BR8"                          'jπ   P$(107) = "BD1BU8D8U3E3G3F3BU1BR3"                              'kπ   P$(108) = "BR1BD1U8L1R1D8L1R2BR4BU1"                            'lπ   P$(109) = "BD1U6D1E1R1F1D5U5E1R1F1D5BU1BR4"                     'mπ   P$(110) = "BD1U6D1E1R2F1D5U4BD3BR4"                             'nπ   P$(111) = "U4E1R2F1D4G1L2H1BR8"                                 'oπ   P$(112) = "U4E1R2F1D4G1L2H1D4U4BR8"                             'pπ   P$(113) = "U4E1R2F1D4G1L2H1BR4D4L1R2L1U4BR5"                    'qπ   P$(114) = "BD1U6D1E1R2F1H1L2G1U1D6BU1BR7"                       'rπ   P$(115) = "BU3U1E1R2F1H1L2G1D1F1R2F1D1G1L2H1BR8"                'sπ   P$(116) = "BR1BU7D2L2R4L2D5F1R1E1BR4"                           'tπ   P$(117) = "U5D5F1R2E1U5D5BR4"                                   'uπ   P$(118) = "BD1BU6D3F2D1U1E2U3D3BD2BR4"                          'vπ   P$(119) = "BD1BU6D5F1R1E1U4D4F1R1E1U5D5BR4"                     'wπ   P$(120) = "BD1BU6D1F2E2U1D1G4D1U1E2F2D1BU1BR4"                  'xπ   P$(121) = "BU5D5F1R2E1U5D8G1L2H1BU3BR8"                         'yπ   P$(122) = "BU5R4D1G4D1R4BU1BR4"                                 'zπEND SUBππSUB NORMAL0πPSET (PFL + 0, PFT + 0), BGC: DRAW C1$ + P$πEND SUBππSUB NORMAL1π    PSET (PFL + 0, PFT + 1), BGC: DRAW C2$ + P$π    PSET (PFL + 1, PFT + 0), BGC: DRAW C1$ + P$π    PSET (PFL + 2, PFT + 0), BGC: DRAW C1$ + P$πEND SUBππSUB OPENINTROπCOLOR 7, 0πSCREEN 9                                    'SET SCREEN MODE TO 9πCLSπLINE (1, 1)-(590, 72), 13, BπLINE (3, 3)-(588, 70), 7, BFπWord$ = "What Day Was It ?"πSPACING$ = "L1"πSIZE$ = "20"πDOT$ = "N"πBGC = 7πCALL TRANSLATEπC1$ = "C 5": C2$ = "C 8": C3$ = "C 8": C4$ = "C 8"πPFT = 52: PFL = 16: CALL LAYER1πPFT = 52: PFL = 14: CALL LAYER1πPFT = 52: PFL = 12: CALL LAYER1πC1$ = "C 5": C2$ = "C 0": C3$ = "C 0": C4$ = "C15"πPFT = 50: PFL = 18: CALL LAYER1πPFT = 50: PFL = 17: CALL LAYER1πColorpref = 1πFancyCls Colors(2, Colorpref), Colors(1, Colorpref)ππLINE (158, 100)-(390, 116), 7, BπLINE (159, 101)-(389, 115), 15, BFπWord$ = "Display Any Day of the Week for"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 1"πC2$ = "C 9"πPFT = 110: PFL = 163: CALL NORMAL1πLINE (158, 122)-(390, 138), 7, BπLINE (159, 123)-(389, 137), 15, BFπWord$ = "   Any Date Between 1753 - 2030"πSPACING$ = "R0"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 1"πC2$ = "C 9"πPFT = 132: PFL = 163: CALL NORMAL1ππHITENTER:πLINE (228, 337)-(340, 350), 7, BFπWord$ = "Press any Key"πSPACING$ = "R1"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 0"πC2$ = "C 8"πPFT = 346: PFL = 231: CALL NORMAL1πINKEY1:πC1$ = "C 0"πC2$ = "C 8"πPFT = 346: PFL = 231: CALL NORMAL1πSLEEP 1πC1$ = "C 4"πC2$ = "C 8"πPFT = 346: PFL = 231: CALL NORMAL1πSLEEP 1πA$ = INKEY$: IF A$ = "" THEN GOTO INKEY1πEND SUBππSUB PAUSEπLINE (248, 337)-(360, 350), 7, BFπWord$ = "Press any Key"πSPACING$ = "R1"πSIZE$ = " 4"πDOT$ = "N"πBGC = 15πCALL TRANSLATEπC1$ = "C 0"πC2$ = "C 8"πPFT = 346: PFL = 251: CALL NORMAL1πINKEY2:πC1$ = "C 0"πC2$ = "C 8"πPFT = 346: PFL = 251: CALL NORMAL1πSLEEP 1πC1$ = "C 4"πC2$ = "C 8"πPFT = 346: PFL = 251: CALL NORMAL1πSLEEP 1πA$ = INKEY$: IF A$ = "" THEN GOTO INKEY2πEND SUBππSUB TRANSLATEπ  SPACING$ = "B" + UCASE$(SPACING$)π     SIZE$ = "S" + UCASE$(SIZE$)π  P$(105) = "BR0BD1U6BU2BD7BR4"                     'iπ  P$(106) = "BR1BD1U6BU2BD7D3G1L2BU4BR8"            'jπ  IF DOT$ = "Y" THEN P$(105) = "BR0BD1U6BU1U1BD7BR4"            'DOT OVER iπ  IF DOT$ = "Y" THEN P$(106) = "BR1BD1U6BU1U1BD7D3G1L2BU4BR8"   'DOT OVER jπ  P$ = SIZE$π  FOR J = 1 TO LEN(Word$)π  P$ = P$ + P$(ASC(MID$(Word$, J, 1))) + SPACING$π  NEXT JπEND SUBπAndrew Jones                   RAD VGA/ANSI DEMO              FidoNet QUIK_BAS Echo          02-11-96 (04:57)       QB, QBasic, PDS        194  12828    RADDEMO.BAS '∙·...............[]RadDemo by Lord Humongous(Andrew Jones)[]...............·∙π'∙    RadDemo...Demo/Intro/Dentro...Released in Quik_BAS GTNet/Fidonet(?)    ∙π'·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·∙·π'        Welcome to another QuickBASIC VGA demonstration.  While BlueWorldπ'was intended for release as an .EXE file used to demonstrate QB's capability,π'RadDemo is intentionally released as source code for others to look atπ'(and learn from I suppose?)  RadDemo is 100% QuickBASIC, and is completelyπ'commented, something I rarely do, but most of its history and documentationπ'is in the RAD.BAS file itself.  You will have no trouble reading this code!ππ'        RadDemo draws all of the still graphics on the screen and thenπ'begins to animate them...  The slats are animated with simple OUT commandsπ'as well as the "copper/raster bars" so called because of the old Amigaπ'"Copper Chip" which has been much emulated on the IBM.  The stars provideπ'a nice display as well as a good mechanism for slowing this demo down forπ'your computer.  Since this demo was written on a 386/16sx, you will noticeπ'that it flickers beyond belief, and it basically blows when viewed at suchπ'as fast rate.ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"RADSRC.ZIP",4^6:Z&=8420:?STRING$(50,177);πU"%up()%9%%%#-%N,IqEPV%FD^,7%%<4%%%,%%%%wf%iSitOh&&<>>TA6fwsOxh0;πU"o)t[c>*LS8a-Q(.;..sj2L?/(bF(-Y:^s7p-ULJEfeQRX)oT8Hr?-aESN?KB^p'πU"(/1NOIph6qmH^#XtL#n0pD=iMMPtP.z(NX^[VDcQKa\xcVaq$U;Fi&brJB8uxiRπU"BmtDL]4HIv*8opuZh*9>FTe'rZ6'VogBZU,x$Z<R0ix+kV<;z4PZm,h4jsIMm3$πU"2UF]1tDx>^xK)-SH$y\hN651&p\TKIWb;dpqe$Qip&6e_8#f05:-?Cbt8T%y-0zπU"0\$2z\mK$Z0A&^_mLtO?2Q\=&A,<?uYfx1SgZnxR7zWMH4G5,A+^AiJ\%wnXk[LπU"sLP+/w;S%MNC9)^\_+xT1F#X^+bPP22?G4E;Sgtb$IF^I.z)0<r.1p?Dz^>VQbQπU"9AbbGbX2KIC(nrBdIptiIr9KhSMf=F)lV(+SJ<w8>-I/H[Me=6?)yb5c?HU;:_WπU"f^Fl\/p./2B&9cC9:qbY=:501^i4gAA/R_C/$Ni)wZBM)b[ofFgF6-&>4r6qL1QπU"Yk2DbH<+.dmbc_alp2#:$7m]G8:/K[aR<E%w/hm^UJ/0DQq3?ua8iD:T#xA,q)(πU"VA;aIC^l7r1$M-._AZAgb=$iKa<YIDa)PdW$*1JZ02Yp-if_[Ka\T_EIqzplG(ZπU"a)8'.d3dnmY4pwS,;+qM3$T7k^?5%C\mYb<l?F5G0(jB;]qL<sYrm8i6%ibN'OgπU"O_8VJ)S-FJSbhPNCiJh%Hv'RgXS+3(oX++I1*;[rBp=%4EP+>a7CN,3T:l,b,FsπU"l0&Y8qe<hIMf]2(4nd_<:)b+5$FP6Lamip9uZr,Rb56g01Ir<*<+aJn8A.-tpkVπU".aRJexGTY\J%XPa1=b3Jb3sD5p/%:i[YND3?T#u#^Y:\$9fn#ZN1+&'9\7DPrjNπU"YFh'Xdy8QDk].+B;pf<1s_q93E&tJ[^J'nKQ$*E'3RLRGU29GZPt$Y56vAdnn]IπU"d1U,Z:adsDH1FlTi$P(S/kZ[+*q4A,BSB1idQr=FPPXF-L8X4o?qqZxmwTpDo-0πU"-Lqm9hLjkGTQOeq<p'oL;v.IPydATbeLS_[oKYbC3k+jJwP*;E,i>f&dD*]b:crπU"JQ<j2&\D>vgMTd1t0i]U%s/2Z'ccp+#uZp[kZggkU=8;oe2,EU90ZsE%,?F>9m9πU"1:f9kS_7+xG2b-)?B9dZ4t5hVZSSL7>Bb>$P%Cu2P[3fK=.E'S9yQADmFO24^4VπU"7[f?7Qw^#NH$kf?C0G^7(j6<Umd^roikY+u6'8=+i'a-0kPWnqOv3?CBn]AkR?lπU"t%R>_6?V?IK5DezDIc):a\3;/4]ihHS?=SNrdSuU+NWX-WmPN0&uM:l6&'0Wri7πU"zFR4;l>23k/*)#XV\IT%F%?npg<m]cFrI#kY$no3U&\wTU_cynv<#9P=QI2cSg_πU"72$fOR%[VfiS4[1>&Y6[ragu]t,HgE&m.l51tN+B/cB&q&$,578j%P:E7a<ev4nπU"+$S&,<o8KMdjUGRRPG'Pr<CkQ<htDu-NhE:TNTlMf+Ye(;VF8aCRW&*'t8C>DHUπU"7W4D*<pFbDi.j&k1CPC9VospY)1;VL_T45=7+3<aZ4^]rZ$B5i4.3,Zu&6qe-%fπU"NS)37Q4oKLm;fPr^<q*TNaFf]^ZRcO^u9YmK:=:S]Ogq^d;cJ:Vrj\A;jIXTKNKπU"Z-YAqih+8FZ3PSEWUCJD()gX2lV:*.C.KkD9(xJRnm\_8BE%D[,DMmoqe8J565CπU"3o0q3qV_0^H\5EA3pg;j)R(?hBBrU4l)G?LaInc#Q)S=SYHHQYHH41g=?5GNRl9πU"w?%K*Jgdqv/xcs=9%YUBePdjYR9,/rhuP-6Hx/m$_VE;^s;9qqZGenf%b:P'2$#πU"$$B*()B3\r&Qu9$EgE$xSg7cN.Zu:T-N$Jiu=GO5P:%4mDV91<pea-tqi+;?>SRπU"DPLNr%7T2wS))ZYQfJcuWy_9I)W3ne3*GzAqZ(7Vp1*hNFcg2H<5.$)-Mu36jJ[πU"E_\S>ZE#rm(fM7FUovdXQ4*3^v3j8Qa%X1S+vG\UW%]5.YdhDE<qKL%.5;k6QULπU"V,$2TOEbG\p2VSy/<*q$N+Q=Wlct#f8rgNvkqn.wv+du2%.'BgfuT^8ourJJF?^πU">e,:7.Z5HY0W'fA28K.A^'Q8=lXa/LchdDnnCNZ:YjzWV/EdYd-tMVK0>U.GVIVπU"CdlahSnah#:k^X9R,-(T(kMtfsb367YhUuCP?itHjkqqD414o<F;'Z]07^LVp^HπU"s[a48/j8D\1;&>b*f7FQ.C'FttLWl6lvkn<KVG\XAXh0I.kC%YP0DKv$OlwVA5eπU"NL\,7$18uF/fyAhU.wS2,MiK'x*up%()9%%%%-%)GtZEVRb_u%>(%%&v4%%%,%%πU"%%wfiS[ify6k&:]L.U5<#(j#xzErToJai[P1Bi>m*:.#QGR),wU.t=JT?UY)d7&πU"k[p>_)\qLa>;FeF^oC&\X>tTWaH[CLN[.(\jT8M\ECrj4<]-r.*0nG0QR<uNVWgπU"QVWV0lp-vWZo'p03QmI_$Sr$sOUe$]9c>'hbj,K>a&k:HRm$42VS7B]$8-a^i$FπU"=/H*WTeS(C$QqP(G3Lw]>f.-N(&?(fa4.nWB5cwLaX9lxXjs9w9H*uPR0oH6Z:*πU"*=,-R&&D<3mAV$YSa[D>(,ULK5Pq]f.0S[0fa6t&y-&jta490E_]%nrhMXaknYzπU"DQWq[';r*2q:PxPA5u$ihF<p<ECc(iK#j1.CSX8B.*BZ2AnGk1%L:KRL1BVg^WeπU"rU,ZX.J(SPSjQ]AX_G>e-SfiUw,?pA&uZL#x'\0am?r>Z/_jQ_+3I?o5ikfl\6#πU"PdU\%miZJUVX'^FcCuQ[rh/:l31%Ixi?nz]-('R^_^tZ_jyg>kak7:lM&4If<5*πU"hOBrpVNszvLN&TPo2pBXvnYz7Md<2kj^468Ht>9n(a:dCuv)$>W\G$8:dbW&?PCπU"0m*D3/,kDkdl&\fD-tNdZ\&wCi;kHFJsXNgIyb-u&HX#WitsqX6ks'p^qpA),aHπU"gE=6^f)5Cgpon,/SpDcn^m?g2<7>nC$>\)Y4<1zn,*'aD)s>+sW8pQh&>9\WE(gπU"Lwp]ggTnOtvPW\m+gf)\yN2\S)VJ0c4ww5nj[([I*g'W4\Sb3+%5/jylQlnqcTSπU"Kr[:BE(qs.gegn*Q/>[jc#bKTHKu:v9h8s(*aOj+=b+DR;L_D/iF#VscPt(b5F/πU"Y;/ADWac.m&.]cQnbkfvP&Wnvs+8.QuY=4<<9,Mb_a?psF]rZl%8?&wMJTXywehπU"LHiXp4jZ.p^h0_jW5nGb0o^E#crLBp[F<4ob7gHi<<_Xni\<BK5/FFTLll0i1gfπU"L_8Fd-QswEN,.xcON8:1lNumGGpSJdeJVnE9KoZFZl5jLrQ88N*3XfN&%up()%9πU"%%%%-%XL.pE\u5)%=:7%%Oa%%%,%%%%wf%iSgfFx&$NYBSAaux4CX>p\D*9Q-;4πU"R8$RD?/):V;><i'k(hJnGy'+8(%lJ2hv$[Br$JxWj\1ytpK*PV[H..)-\V0zp+rπU"bglbb.LfVXcwrp^xr?\4uB^Cck;Qbo=U(U,hLS?g2QE8xe9a5p''=za9ziez/'VπU"1\9?4#Ct-#Ji/u^7ST7+o$:e;(ZI;-S(%qd;75C?lMC2l_i:eZSp$lb#x'__p'SπU"UClq'](ii_/4j]y%n1rl:F1$3+h*QkF/sB80)C;Teh7'wI3vyQmbGW?-.BGHI*GπU"cel7GiIu0amUU9>T^->(iUMokIQC+x_Ni706:y9>&G5%Tf)3C]9:';O;1#8IwQ0πU"ST9;YRjx(sQ$Jv%T7)6WCHkjfTxXO$\HI'P1<$Ce&JGoKWjc36k1p=YC--xT*$bπU"4W<9TSoAH-Y&(+KKA,+8#UDWYH'H2J'776ql:8$?SM)-c:nf9W2-2='z=N-cWQPπU";Kr3nXItU[GvApCM[uK8,820539QjE5w&+1QsL4\=iX\ZPlBl4jX?G;'W^wg+wiπU"AfEM?6Y$dD^::sjbk<i.xcv(OwDLn4sEPJil+GHM*6]W#u(bwgZARm^15,<4?[$πU"KNFdy-pmYsIKQ'N':isWv(Q'^jHVK+zrauWq;A]7X=4%M.WU:lpg'L:P-W/JnEmπU"'/h7YVEyl9(e9Qm^$cW)$q#[\gWci5<Y-'.O#rb3b&W_*'R'Fya.K7Y%mIJY'&(πU"LK<foS5,JZk?$jqmr(ZAn6rU:kRG.H,AqtHF=lAqyl#p4.TDwJ\_<IVIjAd$.O/πU"zd%%*st,.6;LY17R%rMEutL\.]6S1bfv*bhgTP(NAov:WaXIR##:iBQ^D?<JPKbπU"fVpS.OH2s6xKxBf=\Z%j1='fZ#'jjGlGA?4%./AF[+h%E'>.S1=>&tsH(liHy9'πU"LOl%Uh>v[UFB3ToG0caurmduPQ6x>^lG=;+r',0],(u#sK1.BYoatte^0h/y:E'πU"Cw=u1S6eGK8Yk7-B$SNa-ImwoSvkoc.SH)TCJ[_,oqNq0[ta\LTg3#w,/^TH&m3πU"<D;aE<W.O98Vi^xsQc;:(n*ry'f9etj&NChLl3%%U_e\&L\0LKy>+yf+[q(;tmAπU"L.Fh_pTEfmrN%-HcnI9')3wn/pe_>tY%A0Lv$qdbXt?K'3wp^MZ8cd2<r9.4h43πU")%)>,39G:ZgeWL*racc.^9GFKq7QnQIu+I6#o.>#=Q^UpM\8afKTITrok2S-A[pπU"yAS^7%OoOAS;=N7++P*o$x>J)m<Yeg9oBsmgU91v.#niEf:4BJ?a0<X:Sp$iz1eπU">Dft,qi=h+Cdgevos4sxc[3Xcu:qD2AX*uE_1vCwDJt]5)bGgM?t(0+(STHLfkVπU"Qk'Oe\9;z:SR0o2CalhStv2IJ?QVr*Z$k0e]V^EJHMYgkpphL(]RgoEUoIcBh\tπU"Ft*jRpMLM#6kSy-[F;i6#ek+$,Nh:t7Md;4EoHGHMOEB;O#[%O\C#6n:W4.JYhYπU"hdA<;rZg[oZS#l\C83w1e#4jxzY$_Vil%*2/Zdn<RAC7]RUKMf.i;>lduk>i_nuπU"Xa7H'9L7iM0AN[#e3+R%wY(05SKrqa[v(fK^\'A\L;xg]=7:PcX<MkFq,[U$c3=πU"RM^;$Ua;.+FKRs$0=w8Ic:h[8a$uSj7Bo0ol4Xqi=%H5oHv9346[Ylf$xuXbW:RπU"i1q(oZ5)[U/^#=cr6'oAX*\-S$VrWspte3D$$Q1R0U,A*mc[k*7s3*kif)4f)bpπU"T8q65W+M&6CXZMBs*M2FWjGi9v'-0LoRZ70L<oJ/Uqxj<r6Gwq%Y;v9Hjl\-'W>πU"hSNUbL*g\34EEbXwu<l(Kme>e<DR+qILC4qqG30?CSV\vNWmG0')U9C/UDv?8X#πU"if&5-nV,$\Zv(^\OkdV*'8LNg?MR^Mjmr4aCt#Ow.O_IMn)o<tddCDc0cO#dl'PπU"cY3daC6dmioFWOKX&SA:/U5>63XGd-\_p4_FdTEm'>feS1,7=O+f;ZQ=8=<(82GπU"Z\;D<;CHfeo6N>Z[MjkWVi;q&bK4rI-BCCs4b-V$>IZn9bSVnS3COEVL-bOAzQ^πU"$Y1YF+hM0%V'qfE84(HIwvPXk;DNK)C7wWe>8bKK$#pvlx6T?P51NhVR7Ob>l%YπU"gcl2L,4ojllGdV;>W4BNFj,,hQibGieeJBIPN\-=KGRW#Cp6DlvVfJ2Mn\Ev:sTπU"688%SQIB1_IJ)Alf?:2Mq3[D,'?;?E$/I7W'Na8Pt)<c2s)kZ>NaD*2HwVs]6XtπU"+8a3^G>QKf8sbuv7^a1C(3>44%c4Lh'a*3\4>3lnF,gi3.T5HxE&^LlKJd-(=8CπU"+BI>ipQ\dU.0/2N9#o-sX85:5v)3VlP#:Jc;]boKs:OqaWQj'RZn8ep>Ogzb+qgπU"v84*mFvgFOZ]zcs:bRM0BewvkvTd7Ay>S+Oxt?DM/h9%,UNOs0G$P-/?U4'%fe*πU"7G;gKws]+u.mN0L><Qc1$?OR2<BD$:ITG>9_U%%'e%.>xtD9][::ilDMeqwp/:HπU"et__XToHBIfe)3ZQZlb$CJPAHgy.8T7PT)QsS.^1>P*9/5PffmMmF&'qCzm/q[5πU"l(?_M3?iivEpsDXs0nO>1fZRV8f[2g[WFhvQ+T#>UwzVy*wOckNq0$QSW2KVHm-πU"YTDI3jp7-M]mel91K7n>C0M^j585*?AB:NC&k#Z6LFV#wj0%)0fbSTv(BblmHOEπU".)K;\$[NEV-At4)18jjSkE>:]*k^&AhfPceB6avR?Yr73D4cLGSAI6OW;iD+HOxπU".Bv7v-AIo];AbnfV>ZC&H8pf6Yb=FE8tLiVrLG1:wZ*JO9;;Apw^Sx.*J#Hk#COπU"<f%MnwiY)z4MHD<#.o$2Fl6.C6x5LJsdd?oEQBdg>3[9f)d:3j_iFo.d&%Nv891πU"IWlzn]2eeVB5E7E.O1.GkM15[8(#M_IdDf?5A+:yX4PV%(DC9GD8>2pdYJ??jnHπU".3epI'+$0=M_OO))yXzvI9A%#RDJ9A1yduNo\f^wT1q1ea$au>p1Ei+>s:a\NQ2πU")X_]=H'[Mg3tT-8$PKM)Q9sIV-(Pu):IBdgONYc;i6OgMbnK78&#ci)(r]-s-lgπU"'Ex*2.1;<PUI1I$SfH85nQ1rpy'SDs7('nL(I>zB-DXApYX\vC1)rrOdM$uCO;1πU"m$JQQU;aDw5y65xQeS/(OSwN7F,yKNq:2T3sI<_tw\[*I;A30OK3*4'n4FIS1UFπU"6%,HMFJ>AljSuBs/O1fE&1Rhr0[p*oW^hdwO/pExenV.)nT*Mn=eRcm1+xrM_];πU"]2J?C+*<w'*/lM(2T1j$'^1w36J]+)I_)tzvx.RZHQ'pcM5E,2O9/h)]ZLkgPJ;πU"PIZGfrsTwtdkK'.?xo5Co-7hdC=x)tn]oM)$s+BhpA_-gq7CnNH/Spa\DFdXA(.πU")&A$5<u#gCO(s=Q(.o=tx=XdEi(]Dx,Ng[>GnZHP553<S09MHkXhaP?.U;w*)#rπU"k[#/Gt,g^g#ra#HBKSRa6E2gV6nZ)]<w56q]M0\8wtB#rF+#W$=N^N8YJZa$unuπU"gnW#],iD-K^]h:\7Oa;3$9\oM<is/g<.HsC,SoRf[vTI<ksod&(M*/[1Vj1_IFjπU"(rFV&V:NOABi#g&N8W4Z2?qR&bonKkBKoi7aDlRZPB%GcCCh++^,N+tMG>?PhsZπU"'Y-m(1g3yrlG0c2hp1A$Pp-hpM]*U0cY<[Y9q\)m':s;1HUFx37[a^l)j,HYB.=πU"4L$iB]qxk4M('MUlF5MU^Ax:>:F3Ttbm0'._tU5$STpW%#nJ2?6EH?+>c'Gtd3nπU"vZWiP$c66U)[tWd^FELwsl..4$,]:?D3Z+9Y6aV,m=ZWbik_uZZ:^A?)6t-G#U>πU"RgB?b'WRy#&xyHs9uq'/LdLQrYr&-?lItL+&pwLGcF\94IAz-UA>wlS(qWEmmo(πU".UU#Cr\Qlac86CKr'KH$Lv4?94AIIl;C)_2Mce,gdGhTE<'-1VM$,ZYh-AbR>MNπU"Zh&8Fg#7DP==t;K+yq;<sCJ6W(OL?S)dU,ln(Jq9]8&^b(uSv]8vs$:+/lF%sAiπU"wOlePVa,2s\KZfXFOrGk]/kHA$^\<'9cJ<6T-(HOsF4Xw^.eu.b1ux,o'32[B$PπU"S9]kXUc[:/pHy^mV;CmIP2G,SbpwRAlWe:pBWmlbCkSS?918KD>Mhi9jzOE>x*\πU"Ybs?W7?I'k'''p&^d']wj(5V0li)F-ek2&Y5nIK&NE#y[:,kq&Jn_;UF4M:<A6jπU"<]n$pi94>]m[h[,qYFxr<)TW<<:n+x,V.K2.uc\(v0GoRet,.p+)>2Q]I=>uPdrπU"g_TX;)uQkYDI6xdG1[I?YL:;rfF7)=<m8H/fWow2q5_Mg_jRS,xQ_23[\SWJH3$πU"3-gSA0]&'S2QaUu5EA+n>02^z5ED4M<Sf3iMY3Wkpk[.78Q:x>JW6.C>W']X.myπU"uEFHot\wPVe0f%V('QjHq*AgTg:Rg\&fqY1s<^T93l44Ub.#_s>xX:7;7Bo.:8SπU"N4-fHTX->EE*8Lr+a1zzFk.kd>92NE+#&=$D<=*UH>_QX?]E>D/n>#.1MAs?#DcπU"eDRhUvi&aR*ws_(o?cWOX5eBd[6IY3XXme*Nm:mN\O5jnoE6Tn;vW_jrvFv(hxrπU"Q2SiqM+]v,G<$H_u;dwtTW^?k1FeD)0:p'4LXa%4HN[Ni$H^/o]sx^b4xmu>n];πU"w_U%eQI0oZLrU8P)g-a7k;7qBC)dmI#M+2F0FJLrlEC7J4B)lWNV=TFEP]8v&r#πU"/B7_l9b,&b_(A(<\>,Fvl;xBX1<*3?C]DAgPKmKjlRk.?dq\<b.uTGh6U>MPCrOπU"\+tv,;hB1L4>L\;k\[rlKDA2ne4)pdb?/D%FfkjZL'RJW#E,m5QD]5=REagl3;cπU"j]eH/S0=j[1M8P29n[[sKkAgjQG$k4=Y\*]3VR7E\?cb]adWDu4=&bnZc$-F8P5πU".2.^CN^+,0q&_BJG0vJfYWjr.:>u48SPYF6pTC]CIs)[:zhpbO&tiJBJnI\,v_gπU"//f_CCk_-sqEc]TQgeAp+Tf9.cs%n<1:yHkog7.wKfBRUU\<RoP(ll$],isMZQdπU"-LcFc)#<KR/jDV(<M6ZF3PmLzjDv(znzt?\_bYS+[S%Srbni?L)Nc4oobvMY\O#πU"jP>:MelKM-Dv0XVNN;sH1brEwZM1NmZJ-FIV[WfxS;p]ObXM6JIuMoEd8#IUua7πU"RC_xQ+P'MRcZ_E$DD?>)TFsNmjJFgY/$29jGk#remn?$.WUb)Hl#t6-wU/x&n=\πU"7cSA)z^c\n.^I$[Wrs?G_h>4PAh*U$R(S<8jb]oh_(a]D\IBBEk\%Q4$eTw'nM&πU"Dln?bZ2wfRtZK:j3KMDKM;,=NR\7ZPRJB'pb)Rf&KR:ush1p964uXsCD/ivU$hBπU"Es5U^^EJM&IOf8G,n$g<CqG7bu\D]wWKgTqkWoip*>=3p._-YFR\4EgIDH;4ADLπU"Y)2/8#&pu]c<v9P_+lngWZ$0YM_ygd_'Rh^OjS?uC?+*i''WwJf]Xpw[2srrMc<πU"j=O6V8b'BbpoRJZVqZR7[76s[UN&Y0K2[d?Jd)u=/QT]GvzEN9lwHSeMeG6VO*pπU"[EW%*hU\xO4]Kp&,NK*-\Z<wfg[$OSX*.+^^bUsQ#J^T2KQ?cmfRj97RkF.QN_0πU"mqZSNMI,2j\/EK$d_]Eq?mAk_ERJRv+pH+LdH$o0W6N;tH(]y#^Mgi*CSml:K1SπU"'TH_xtdn+qPBzo\^N=fWuj2Gj&nt5Qs.LlPIK7CLb9zOnAErc]Ee:+1xtSKIURsπU"D7c:.IY^R5?[22--:plu1?\Q4rNnx/EfbmVNgv;t,A#*YK'ib?A'ANaEXQPuPWTπU"<j]hjd0>_b0;ikk;wOOlNih5]0toHVu%bkwG<LToh26Qr-1eND8xjns*7fl<<wrπU"t7Zx(jN8;.?tS*t=Ovr/we((kpxc=X#7we)zNp<R06E4,Ae8Nri+XUNBue]cd#cπU"L/g;7q$07It0QKBZ(&bgI>D[;]J/GEP)Wl5V6$tTF%LdI0%hWdI]kGXd#aXD>18πU"W[xuc\iAAvQtk4?q8C?WG<tYZi/P?0lisaCWS;m$+WBc<Da51xSf+>-_Z2WD6ipπU"Y-IW%2Nvoh37jv\5)D0tEp1<d#SCXtrT*aot-mFv$b3,]nrLgIqsYFJt?oKAJ(oπU"<rfmA)3t6_NWfUzJ.two_')qzjjC\Fz*pRy/25zE9vkhF,nXzp-6SB<:Es/B]==πU"_r:nWY7wT:fAv0TaSwk%xg_$(tAlH&;oRhacGJ5NA*jkZ=^/KNb%T$I.GKc\vaLπU"$/qGYg\F?lefnaT2,zgn8+kknR/v]pY98pJe+bA9Hqc]>#*2P*xCTeK*:;$2W*+πU",&b*LEX<0YWu-;eMw9]kJ*]AZs;AjVgLdht.H[Yq:f-u<E]riPvG_4w\bx$-iTvπU"tI3V6GIb9\TpTvIM9hip^u%aP0OJ\J4BVsJuv=2BQwl_vrG(WkO6E/.=v722bisπU"u'Fy]x.T7*3qhn238-aQo0p[&XL?Rn3AIz/\uooNfO=L2smpd=<-.?L*ZPc/F/TπU"/F-P(U_de1^&?V&7J,$VLYS]k71OTBsji]lK.q<12MYyasd:1U>Ebwe1(A.=(kHπU"GgeqpgK**\,;DET;baQ4VKS0Llu8SB.J6_HrkmOl&N%b7],hqO<rX2T=Rt:3B#\πU"Ud(M+gBx3mv.ERg_iz7&1MOrx**m*#4mL<x:(2(Kq18$3XqLg?b]1/AdHobMczTπU"=ZM=kQ(aeV1mN:hg4.#p=Fv6>,w;t3(\&M_u$\ePP%Hg?oxW,E#_L:x^R6lRuHQπU"o'%r\^p\<wLoM82MXd6d<5Z2EMC$ig0D+U7FpUl8nKah(%?3:2BRc/1ylHrO]_[πU"66dr..<<MDu_L\M^hjpZ9DuN+C^8Y/iDY]3q/Ry+r_m<SdoMKq%\8$r-c^*GhKcπU"=gYeRthc7B82Smb0Xnf&$&0?M/6?rNu%p&'9%%9%%%%-%NA,qEP&VFD^[,%%<%4πU"%%,%%%%%%%%%&%%E%%%%%%%%%wfi%Sith%up&'%9%9%%%%-%)GtZEVRb_u%>(%%πU"&v4%%%,%%%%%%%%%%%E%.%%-,%%%wf%iSif%yup&%'9%9%%%%-%%XLpCE\u)*%=πU":%+%Oa%%%,%%%%%%%%%&%E#%%%k%/%%w%fiSg%fxup%*+%%%%%(%.(%n%%%%TE%πU"%%%%πEND SUBπCLOSE:IF S=231AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπAaron Scott Zabudsky           GAME OF LIFE ALGORITHM         zabudsk@ecf.toronto.edu        12-27-95 (00:11)       QB, QBasic, PDS        73   5211     GOFLIFE.BAS maxwidth = 80πmaxheight = 25πDIM world(maxwidth + 1, maxheight + 1)πDIM result(maxwidth + 1, maxheight + 1)ππFOR y = 1 TO maxheightπ   FOR x = 1 TO maxwidthπ      READ world(x, y)π   NEXT xπNEXT yππa$ = ""πWHILE a$ <> "X"π   CLSπ   FOR y = 1 TO maxheightπ      FOR x = 1 TO maxwidthπ         IF world(x, y) = 1 THEN LOCATE y, x: PRINT "@";π      NEXT xπ   NEXT yπ  π   FOR y = 1 TO maxheightπ      FOR x = 1 TO maxwidthπ         count = world(x - 1, y - 1) + world(x, y - 1) + world(x + 1, y - 1)π         count = count + world(x - 1, y) + world(x + 1, y)π         count = count + world(x - 1, y + 1) + world(x, y + 1) + world(x + 1, y + 1)π         IF count = 3 THENπ            result(x, y) = 1π         ELSEIF count = 2 AND world(x, y) = 1 THENπ            result(x, y) = 1π         ELSEπ            result(x, y) = 0π         END IFπ      NEXT xπ   NEXT yπ  π   FOR y = 1 TO maxheightπ      FOR x = 1 TO maxwidthπ         world(x, y) = result(x, y)π      NEXT xπ   NEXT yπ  π  π   a$ = UCASE$(INKEY$)ππWENDπππDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ππAndrew Jones                   SILLY GAME                     FidoNet QUIK_BAS Echo          04-14-96 (14:33)       QB, QBasic, PDS        70   1676     ARG.BAS     'This is a silly game I wrote awhile back.  There are 20 or so big dotsπ'moving around and you are the one that is NOT their color.  All you do isπ'avoid them, each time you touch them your score is reset.  Whoop.  It'dπ'prolly be more fun on a Calculator written in Z80 asm, but oh well.ππDEFINT A-Zπdie = 0πxx = 0πyy = 0πRANDOMIZE TIMERπSCREEN 13πDIM bx(20)πDIM by(20)πDIM bmy(20)πDIM bmx(20)πd = 0πmy = 1πDOπLINE (xx, yy)-(xx + 2, yy + 2), 0, BFπl$ = INKEY$πSELECT CASE l$πCASE "4"πmx = -1πCASE "6"πmx = 1πCASE "8"πmy = -1πCASE "2"πmy = 1πEND SELECTπxx = xx + mxπyy = yy + myπIF xx > 319 THEN xx = 319πIF xx < 0 THEN xx = 0πIF yy < 0 THEN yy = 0πIF yy > 199 THEN yy = 199πLINE (xx, yy)-(xx + 2, yy + 2), 9, BFπFOR t = 0 TO 20πIF bx(t) = 0 AND by(t) = 0 THENπbx(t) = INT(RND * 320)πby(t) = INT(RND * 200)πbmx(t) = INT(RND * 5) + 2πIF INT(RND * 2) + 1 = 1 THEN bmx(t) = -bmx(t)πIF INT(RND * 2) + 1 = 1 THEN bmy(t) = 1 ELSE bmy(t) = -1πEND IFπLINE (bx(t), by(t))-(bx(t) + 2, by(t) + 2), 0, BFπbx(t) = bx(t) + bmx(t)πby(t) = by(t) + bmy(t)πIF bx(t) > 319 THEN bmx(t) = -bmx(t)πIF bx(t) < 0 THEN bmx(t) = ABS(bmx(t))πIF by(t) > 199 THEN bmy(t) = -bmy(t)πIF by(t) < 0 THEN bmy(t) = ABS(bmy(t))πIF POINT(bx(t), by(t)) = 9 THEN die = 1πIF POINT(bx(t) + 1, by(t)) = 9 THEN die = 1πIF POINT(bx(t) + 1, by(t) + 1) = 9 THEN die = 1πIF POINT(bx(t), by(t) + 1) = 9 THEN die = 1πIF die = 1 THENπscore = 0πdie = 0πx = 0πy = 0πEND IFπLINE (bx(t), by(t))-(bx(t) + 2, by(t) + 2), 2, BFπNEXTπLINE (0, 195)-(score \ 4, 199), 4, BFπLINE (319, 195)-(score \ 4, 199), 0, BFπscore = score + 1πLOOP UNTIL score = 319 * 4πCLSπENDπJustin Pasher                  LINE & CIRCLE REPLACEMENTS     FidoNet QUIK_BAS Echo          04-14-96 (21:45)       QB, QBasic, PDS        83   2120     GRAPHICS.BAS'> 'I need an algorythm (sp) that will allow me to draw a line withoutπ'> 'using the LINE command. The code below gives you an idea of whatπ'...ππ' Here's some code. I converted it from Pascal, so I hope it's allπ'correct! Enjoy!ππSUB Line (X1, Y1, X2, Y2, Col)π  ' This draws a line from X1,Y1 to X2,Y2π  XLength = ABS(X1-X2)π  DX = SGN(X1-X2)π  YLength = ABS(Y1-Y2)π  DY = SGN(Y1-Y2)π  IF DY = 0 THENπ    IF DX = -1 THENπ      FOR X = X1 TO X2π        PSET(X,Y1),Colπ      NEXTπ    ELSEIF DX = 1 THENπ      FOR X = X2 TO X1π        PSET(X,Y1),Colπ      NEXTπ    END IFπ    EXIT SUBπ  END IFπ  IF DX = 0 THENπ    IF DY = -1 THENπ      FOR Y = Y1 TO Y2π        PSET(X1,Y),Colπ      NEXTπ    ELSEIF DY = 1 THENπ      FOR Y = Y2 TO Y1π        PSET(X1,Y),Colπ      NEXTπ    END IFπ    EXIT SUBπ  END IFπ  XSlope = XLength/YLengthπ  YSlope = YLength/XLengthπ  IF YSlope/XSlope < 1 AND YSlope/XSlope > -1 THENπ    IF DX = -1 THENπ      FOR X = X1 TO X2π        Y = CINT(YSlope*X)π        PSET(X,Y),Colπ      NEXTπ    ELSEIF DX > 0 THENπ      FOR X = X2 TO X1π        Y = CINT(YSlope*X)π        PSET(X,Y),Colπ      NEXTπ  ELSEπ    IF DY < 0 THENπ      FOR Y = Y1 TO Y2π        X = CINT(XSlope*Y)π        PSET(X,Y),Colπ      NEXTπ    ELSEIF DY > 0 THENπ      FOR Y = Y2 TO Y1π        X = CINT(XSlope*Y)π        PSET(X,Y),Colπ      NEXTπ  END IFπEND SUBππ'> If that algorithm for drawing lines is in ASM could you convertπ'> it to QB and send it to me? Anything for a circle?ππ' Well what do ya know! I do have a circle algorithm! Here 'tis!π'(converted from Pascal again, so you might need a few END IFs.. :)π'NOTE: This algorithm seems to draw the circle where it looks more likeπ'an ellipse, but it's sorta close to a circle. You can try messing aroundπ'with a few aspects to tweak it out. Laterz...ππSUB Circles(X, Y, Rad, Col)π  ' This draws a circle with center X,Y, with Rad as it's radiusπ  Deg = 0π  DOπ    X = CINT(Rad*COS(Deg))π    Y = CINT(Rad*SIN(Deg))π    PSET(X+160,Y+100,Col)π    Deg = Deg + 0.005π  LOOP UNTIL Deg > 6.4πEND SUBπLarry Stone                    LIST OF DRIVES                 FidoNet QUIK_BAS Echo          01-01-90 (00:00)       QB, PDS                75   2450     DRVLIST.BAS ' > In QuickBASIC, how do I obtain a list of all active drives (exceptπ' > diskette drives).  In other words, the C drive and any Novellπ' > network drives.ππDEFINT A-Zππ'$INCLUDE: 'qbx.bi'ππDECLARE FUNCTION FDList$ ()πDECLARE FUNCTION HDList$ (FloppyList$)ππ'***********************************************************************π'* FUNCTION FDList$π'*π'* PURPOSEπ'*    PEEKs at the BIOS Equipment Word to return a list of floppyπ'*    drives installed on the system.π'*π'* CREDIT(S)π'*    Larry Stone, based on a routine published in MicroHelp's BUGπ'*    Newsletter, 1/1/90.π'*π'*    Modified to use fixed-length strings.π'***********************************************************************πFUNCTION FDList$ STATICπ   DEF SEG = 0π   FD% = PEEK(&H410) \ 64 + 1                'How many FDs installed?π   DEF SEG                                   'Restore DGROUPπ   FD$ = SPACE$(FD%)ππ   FOR N% = 1 TO FD%                         'Place these letters intoπ      MID$(FD$, N%, 1) = CHR$(64 + N%)       '  FD$π   NEXTππ   FDList$ = FD$                             'Return valueπ   FD$ = ""πEND FUNCTIONππ'***********************************************************************π'* FUNCTION HDList$π'*π'* PURPOSEπ'*    Uses DOS ISR 21H, Function 44H, Subfunction 09H (Is Drive Remote)π'*    to return a list of valid, local hard drives.π'*π'* CREDIT(S)π'*    Larry Stone, based on a routine published in MicroHelp's BUGπ'*    Newsletter, 1/1/90.π'*π'*    Modified to use fixed-length strings.π'***********************************************************************πFUNCTION HDList$ (FloppyList$)π   DIM IRegs AS RegType, ORegs AS RegTypeππ   FloppyList$ = FDList$                     'Get floppy drive listπ   FDs% = LEN(FloppyList$)                   'How many drives found?ππ   HD% = FDs% + 1 + ABS(FD% = 1)             'If only 1 FD, first is C:π   HD$ = SPACE$(HD%)ππ   FOR BL% = HD% TO 26                       'Check possible hard drivesπ      IRegs.ax = &H4409                      'Set up callπ      IRegs.bx = BL%                         'Drive letter in BLπ      Interrupt &H21, IRegs, ORegs           'Call DOSππ      IF (ORegs.flags AND 1) THEN            'Check carry flagπ         EXIT FORπ      END IFππ      MID$(HD$, HD%, 1) = CHR$(64 + ORegs.bx)'Add the letterπ   NEXTππ   HDList$ = HD$                             'Return valueπ   HD$ = ""πEND FUNCTIONπThomas Gohel                   DETECT COMPUTER PROCESSOR UNIT comp.lang.basic.misc           02-03-96 (00:00)       PB                     173  4957     PBCPU.BAS   '*************************************************************************π'π'  PBCPU.BAS:  Ermitteln des Prozessortyps in PowerBASIC 3.0/3.2π'              / CPU-Detection with PowerBASIC 3.0/3.2π'π'  entwickelt von Thomas Gohel  Fido:      2:2410/301.12π'  Version: 1.01                InterNet:  author@pbsound.snafu.deπ'  Stand  : 02.03.1996          Homepage:  http://www.snafu.de/~pbsound/π'π'  unter Verwendung einiger Sourcen aus dem Jahre 1994 aus der ASM86.GERπ'π' --------------------------------------------------------------------------π'π' Beschreibung: Das Programm fΣngt beim Status Prozessor = 8086 an undπ' ⁿberprⁿft, ob jeweils die Statusregister-Bits des nΣchst h÷herenπ' Prozessors gesetzt werden k÷nnen.π' Bei Erkennung der Unterstⁿtzung des CPUID-Befehls wird der Prozessortypπ' aus der 'Familykennung' ermittelt. Neuere CPU's sollten diesen Befehlπ' unterstⁿtzen, ebenso zukⁿnftige Prozessorgenerationen.π'π'     Bedeutung der Variable Prozessor?:π'     0   = 8086/8088π'     1   = 80186π'     2   = 80286π'     3   = 80386π'     4   = 80486π'     5   = 80586 (Pentium)π'     6   = 80686 (Pentium Pro)π'     7   = nΣchste CPU-Generationen :-))π'     255 = V20/V30π'π'***************************************************************************ππ$COMPILE EXEπPRINT "ermittelter Prozessortyp: "; CPUTyp$πENDππFUNCTION CPUTyp$ publicπ        LOCAL Prozessor?π        DIM Vendor AS STRING * 12ππ        ! pushfπ        ! mov     ax, &h0000π        ! push    axπ        ! popfπ        ! pushfπ        ! pop     axπ        ! and     ax, &hF000π        ! cmp     ax, &hF000π        ! jnz     Teste286ππ        ! mov     ax, &hFFFFπ        ! mov     cl, &h21π        ! shl     ax, clπ        ! jnz     Setze186π        ! mov     Prozessor?, &h00π        ! popfππ        ! xor     ax, axπ        ! mov     al, &h40π        ! mul     alπ        ! jz      SetzeNECπ        ! jmp     CPUEndeππ        Setze186:π        ! mov     Prozessor?, &h01π        ! popfπ        ! jmp     CPUEndeππ        SetzeNEC:π        ! mov     Prozessor?, &hFFπ        ! jmp     CPUEndeππ        Teste286:π        ! mov     ax, &h7000π        ! push    axπ        ! popfπ        ! pushfπ        ! pop     axπ        ! and     ax, &h7000π        ! jnz     Teste386π        ! mov     Prozessor?, &h02π        ! popfπ        ! jmp     CPUEndeππ        Teste386:π        ! mov     bx, spπ        ! and     sp, &hFFFCπ        ! db      &h66π        ! pushfπ        ! db      &h66π        ! pop     axπ        ! db      &h66π        ! mov     cx, axπ        ! db      &h66π        ! xor     ax, &h0000π        ! dw      &h0004π        ! db      &h66π        ! push    axπ        ! db      &h66π        ! popfπ        ! db      &h66π        ! pushfπ        ! db      &h66π        ! pop     axπ        ! db      &h66π        ! xor     ax, cxπ        ! mov     Prozessor?, &h03π        ! mov     sp, bxπ        ! jz      CPUEndeπ        ! and     sp, &hFFFCπ        ! db      &h66π        ! push    cxπ        ! db      &h66π        ! popfπ        ! mov     sp, bxππ        Teste486:π        ! mov     Prozessor?, &h04π        ! db      &h66π        ! mov     ax, cxπ        ! db      &h66π        ! xor     ax, &h0000π        ! dw      &h0020π        ! db      &h66π        ! push    axπ        ! db      &h66π        ! popfπ        ! db      &h66π        ! pushfπ        ! db      &h66π        ! pop     axπ        ! db      &h66π        ! xor     ax, cxπ        ! je      CPUEndeππ        TesteCPUID:π        ! db      &h66π        ! xor     ax, axπ        ! inc     axπ        ! dw      &hA20Fπ        ! and     ah, &h0Fπ        ! mov     Prozessor?, ahπ        ! xor     ax, axπ        ! dw      &hA20Fπ        ! db      &h66π        ! mov     Vendor$[00], bxπ        ! db      &h66π        ! mov     Vendor$[04], dxπ        ! db      &h66π        ! mov     Vendor$[08], cxππ        CPUEnde:π        SELECT CASE Vendor$π            CASE "GenuineIntel": Manufacturer$ = "Intel "π            CASE "AuthenticAMD": Manufacturer$ = "AMD "π            CASE "NexGenDevice": Manufacturer$ = "NexGen "π            'CASE "UMC UMC UMC ": Manufacturer$ = "??? "π            CASE ELSE          : Manufacturer$ = "Intel "π        END SELECTπ        SELECT CASE Prozessor?π            CASE 0  : CPUTyp$ = "Intel 8088/8086"π            CASE 1  : CPUTyp$ = "Intel 80186"π            CASE 2  : CPUTyp$ = "Intel 80286"π            CASE 3  : CPUTyp$ = "Intel 80386"π            CASE 4  : CPUTyp$ = Manufacturer$ + "80486"π            CASE 5  : CPUTyp$ = Manufacturer$ + "Pentium"π            CASE 6  : CPUTyp$ = Manufacturer$ + "Pentium Pro"π            CASE 255: CPUTyp$ = "NEC V20/V30"π            CASE ELSE:π                      CPUTyp$ = "Intel 80" + CHR$(Prozessor? + 48) + "86"π        END SELECTπEND FUNCTIONπJim Emptage                    PATH CHECK                     75504.2526@compuserve.com      03-10-96 (01:47)       QB, QBasic, PDS        190  4725     PATHCHK.BAS 'PATHCHK BY ROUGE VALLEY SOFTWARE 1996 75504.2526@COMPUSERVE.COMπ'π'* Place program anywhere on the C: driveπ'* It will show your path, and check that all directories existπ'* If some directories are no longer valid you will be asked if youπ'* wish the PATH line in your autoexec.bat file changed to remove themπ'* A back up of your original autoexec.bat file is [made autoexec.rvs]π'* Shareware, all rights reservedπ'* Please ask permission if distributed in any package that is for sale.π'π'Jim Emptage, Rouge Valley SoftwareπCLSπCOLOR 7, 4πPRINT " ROUGE VALLEY SOFTWARE PATH CHECK (1996)   75504.2526@COMPUSERVE.COM            "πCOLOR 7, 0πOPEN "rvsdrive.dat" FOR OUTPUT AS #2πCLOSE #2πSHELL "cd>rvsdrive.dat"πOPEN "rvsdrive.dat" FOR INPUT AS #2πDO UNTIL EOF(2)π  INPUT #2, CURDRIVE$πLOOPπCLOSE #2πPRINT "EXAMINE PATH STATEMENT : Changing to the root drive \"πPRINT "                       : Return to : "; CURDRIVE$; " when done."πCHDIR "\"πCOLOR 7, 1πPRINT " MAKING DOS VERIFIED BACKUP OF AUTOEXEC.BAT > AUTOEXEC.RVS                      "πCOLOR 7, 0πSHELL "COPY AUTOEXEC.BAT C:\AUTOEXEC.RVS/V/Y"πOPEN "rvstemp.dat" FOR OUTPUT AS #1πCLOSE #1πOPEN "rvstemp.dat" FOR APPEND AS #1πOPEN "autoexec.bat" FOR INPUT AS #2πcnt = 0πDO UNTIL EOF(2)π  LINE INPUT #2, x$π  cnt = cnt + 1π  IF UCASE$(MID$(x$, 1, 4)) = "PATH" THENπ    EXIT DOπ  END IFπLOOPπCLOSE #2πCOLOR 7, 4πPRINT " CURRENT PATH: ";πCOLOR 7, 0πPRINT RTRIM$(x$)πPRINT "Line in AUTOEXEC.BAT: "; cnt;πPL = LEN(x$)πPRINT " PATH length: "; PLπPRINT "[ Note PATH line can only have 127 characters ]"πCOLOR 7, 1πPRINT " COUNTING DIRECTORIES IN PATH:                                                  "πCOLOR 7, 0πx$ = UCASE$(x$)πpcnt = 0πFIRST = INSTR(x$, "C:\")πFOR M = FIRST TO PLπ  P$ = MID$(x$, M, 1)π  IF P$ <> ";" THENπ    PDIR$ = PDIR$ + P$π  ELSEπ    IF RTRIM$(PDIR$) <> "" THENπ      PRINT " "; PDIR$; " ";π      PRINT #1, PDIR$π      PDIR$ = ""π      pcnt = pcnt + 1π    END IFπ  END IFπNEXTπIF RTRIM$(PDIR$) <> "" THENπ  PRINT " "; PDIR$; " ";π  PRINT #1, PDIR$π  PDIR$ = ""π  pcnt = pcnt + 1πEND IFπPRINTπPRINT pcnt; " DIRECTORIES IN PATH "πCLOSEπCOLOR 7, 4πPRINT " CHECKING THAT ALL DIRECTORIES ARE VALID                                        "πCOLOR 7, 0πREDIM iv(pcnt) AS STRINGπON ERROR GOTO DERRπOPEN "RVSTEMP.DAT" FOR INPUT AS #1πIVCNT = 0πDO UNTIL EOF(1)π  INPUT #1, dc$π  dc$ = RTRIM$(dc$)π  IF MID$(dc$, LEN(dc$), 1) = "\" THENπ    dc$ = MID$(dc$, 1, LEN(dc$) - 1)π  END IFπ  CHDIR dc$π99π  IF ed = 1 AND block = 0 THENπ    COLOR 14, 4π    PRINT " INVALID DIRECTORIES FOUND ... [THEY DO NOT EXIST]                              "π    COLOR 7, 0π    block = 1π  END IFπ  IF ed = 1 THENπ    PRINT " "; dc$; " ";π    IVCNT = IVCNT + 1π    iv(IVCNT) = dc$π    ed = 0π  END IFπLOOPπCLOSEπCHDIR "\"πIF block = 0 THENπ  COLOR 1, 7π  PRINT " NO INVALID DIRECTORIES FOUND ... ALL DIRECTORIES LISTED EXIST ... PASS         "π  COLOR 7, 0πEND IFπIF IVCNT = 0 THEN GOTO 101πCOLOR 7, 1πPRINTπPRINT " REMOVE INVALID DIRECTORIES FROM PATH (Y/N)                                     "πCOLOR 7, 0π88πWHILE INKEY$ <> ""πWENDπCH$ = UCASE$(INPUT$(1))πSELECT CASE CH$π  CASE "Y"π    OPEN "rvstemp.dat" FOR INPUT AS #1π    np$ = "PATH "π    DO UNTIL EOF(1)π      LINE INPUT #1, x$π      nogo = 0π      FOR z = 1 TO IVCNTπ        IF INSTR(UCASE$(x$), iv(z)) > 0 THEN nogo = 1π      NEXTπ      IF nogo = 0 THENπ        np$ = np$ + UCASE$(x$) + ";"π      END IFπ    LOOPπ    CLOSEπ    COLOR 7, 1π    PRINT " UPDATING PATH IN AUTOEXEC.BAT TO:                                  "π    COLOR 7, 0π    PRINT np$π    OPEN "rvstemp2.dat" FOR OUTPUT AS #1π    OPEN "autoexec.bat" FOR INPUT AS #2π    pblock = 0π    DO UNTIL EOF(2)π      LINE INPUT #2, x$π      IF UCASE$(MID$(x$, 1, 4)) = "PATH" AND pblock = 0 THENπ        pblock = 1π        PRINT #1, np$π      ELSEπ        PRINT #1, x$π      END IFπ    LOOPπ    CLOSEπ    KILL "AUTOEXEC.BAT"π    NAME "RVSTEMP2.DAT" AS "AUTOEXEC.BAT"π  CASE "N"π  CASE ELSEπ    SOUND 40, 1π    GOTO 88πEND SELECTπ101πCLOSEπKILL "\rvstemp.dat"πCHDIR CURDRIVE$πLOCATE 25, 1πCOLOR 14, 1πPRINT " FINISHED    -    PRESS ANY KEY TO EXIT PROGRAM                                 ";πCOLOR 7, 0πWHILE INKEY$ <> ""πWENDπDOπLOOP WHILE INKEY$ = ""πCLSπENDπDERR:πIF ed = 0 THEN ed = 1πSELECT CASE ERRπ  CASE 76π    SOUND 40, 1π    RESUME 99π  CASE ELSEπ    PRINT ERR, ERLπ    PRINT "WARNING: UNDETERMINED ERROR"π    PRINTπ    PRINT "DO NOT USE THE INFORMATION PROVIDED BY THIS PROGRAM"π    PRINT "CHECK YOUR AUTOEXEC.BAT FILE INCASE OF UNWANTED CHANGES"πEND SELECTπRESUME 101πRobert Fortune                 DETECT IF SHARE IS LOADED      FidoNet QUIK_BAS Echo          04-11-96 (17:59)       QB, PDS                35   1811     SHARED.BAS  '>2. Is there anyone who has experience writing multi-node doors?  Now,π'>here I am referring both to the ability for the game to be playingπ'>simultaneously on multiple nodes (which DFrame does automatically), andπ'>ALSO to the ability for users on multiple nodes to be playing againstπ'>each other.ππ'   I have experience writing BBS game doors that can be play simultaneouslyπ'   on multiple nodes but they cannot play each other. I don't imagine itπ'   would be very difficult to write a door that allows players to playπ'   against each other while on different BBS nodes. I believe some peopleπ'   write player's commands\incoming data to a file which the other nodesπ'   can than read and act upon in real time. Does that help?π'     To determine if the BBS is multinode you can use the followingπ'   function to determine if DOS's TSR program SHARE is loaded and if itπ'   is then your program will know that it has to lock and unlock itsπ'   data file(s). Some people just lock all their door's data files noπ'   matter if the host BBS is multinode or not. That is up to you.ππDEFINT A-Z   ' untyped variables default to type integerπ' $INCLUDE: 'QB.BI'πDECLARE FUNCTION IsShare% ()πDIM SHARED InReg AS RegType, OutReg AS RegTypeπPRINT "The DOS Utility SHARE is ";πIF IsShare% THENπ   PRINT "loaded. Lock/Unlock your file(s) as needed."πELSEπ   PRINT "is NOT loaded. No need to lock your file(s)."πEND IFπFUNCTION IsShare% STATICπ  IsShare% = -1                           ' assume Share is loadedπ  RegType.ax = &H1000                     ' service 10hπ  CALL Interrupt(&H2F, InReg, OutReg)     ' check for presence of SHAREπ  AL = RegType.ax AND 255                 ' isolate the result in ALπ  IF AL <> &HFF THEN IsShare% = 0         ' SHARE not foundπEND FUNCTIONπGeoffrey Liu                   ERRORLEVEL OF RETURNED SHELL   QBTIPS_?.DOC                   12-17-92 (21:25)       QB, QBasic, PDS        18   706      ERRLEVEL.BAS'> I have looked in several books for the QuickBasic equivalent of Batchπ'>language's ERRORLEVEL command.  I couldn't get ERRORLEVEL to work in QBπ'>and I am wondering if there is a command that does the same thing. I'mπ'> trying to get QuickBasic to take Errorlevels from a program that I amπ'> SHELLing out to run.ππDECLARE FUNCTION ErrorLevel% () 'Returns errorlevel of shelled programππFUNCTION ErrorLevel%ππ   'Purpose : To check the error level of a program returning from shellπ   'Input   : none (well, helps if you did shell a program first)π   'Return  : The errorlevel returned from the last shelled programππ   DEF SEG = 0π   ErrorLevel% = PEEK(&H4FE)π   DEF SEGπEND FUNCTIONπJoey Shaw                      EXITING WITH ERRORLEVEL        Load with QB /LQB              08-04-92 (16:13)       QB, PDS                13   346      EXITERR.BAS '> Sure is! It's REAL simple. All you have to do is declare a sub...ππ'Ohhh...ππ'> DECLARE SUB ExitWithErrLvl ALIAS "_Exit" (BYVAL ErrorLevel%)ππ'Ok....ππ'> There thats it. Now to exit with an errorlevel just do this.π'> ExitWithErrLvl 5π'> That exits with errorlevel 5! See, pretty easy huh! See ya!ππ'Yeah, tell me about it! ThanxπTony Elliott                   CHECK IF IN A SHELL            QB TidBits                     09-06-92 (18:09)       QB, PDS                107  2993     INSHELL.BAS ' >Is it possible for a spawned program (via SHELL or more importantly viaπ' >QBSWAP) to know the name of the program which spawned it? (or even to knowπ' >that it is a shelled program and not a "top-level" program?)  How?ππ'There is a way to determine if a program is a child process. However,π'I haven't been able to determine the name of the parent process. Thisπ'EXE filename is normally store just above the apps copy of theπ'environment. Apparently this info is destroyed when the parent appπ'shells.ππ'Here's some code to determine if the app is being executed from aπ'shell:ππ'$INCLUDE: 'QB.BI'ππDEFINT A-ZπDECLARE FUNCTION ImInAShell% ()πDECLARE FUNCTION BPeek% (Segment&, Offset%)πDECLARE FUNCTION WPeek% (Segment&, Offset%)πDECLARE FUNCTION ExeName$ (Psp%)ππIF ImInAShell% THENπ    PRINT "I'm in a shell!"πELSEπ    PRINT "I'm not in a shell."πEND IFπ ππFUNCTION BPeek% (Segment&, Offset%)ππ    'Peeks a byte (two bytes) and returns it as a result of the functionππ    DEF SEG = Segment&                  'Point to data segmentπ    Temp% = PEEK(Offset%)               'Peek byte into temp variableπ    DEF SEG                             'Point back to DGroupπ    BPeek% = Temp%                      'Return itππEND FUNCTIONππFUNCTION ImInAShell%ππ  DIM Reg AS RegTypeXπ    π  IntNo = &H21                        'Get Current PSPπ  Reg.ax = &H5100π  GOSUB DoDosCallπ  CurrentPSP = Reg.bxππ  Reg.ax = &H5200                     'Get DOS "List of Lists"π  GOSUB DoDosCallπ  Offset = Reg.bxπ    π  'Get pointer to first memory control block (MCB) ES:BX-2π  MemBlock& = WPeek(CLNG(Reg.es), Offset - 2)ππ  DOπ    Id = BPeek(MemBlock&, 0)π    SELECT CASE Idπ      CASE &H4D                   'Part of MCB chainπ        OwnerPSP = WPeek(MemBlock&, 1)π        BlockSize& = WPeek(MemBlock&, 3)π        IF OwnerPSP <> 0 AND OwnerPSP <> 8 AND LastPSP <> OwnerPSP THENπ          'Valid blockπ          LastPSP = OwnerPSPπ          ParentPSP = WPeek(CLNG(OwnerPSP), &H16)π          IF ParentPSP = OwnerPSP THENπ            IF FirstCommandCom = 0 THENπ               FirstCommandCom = ParentPSPπ            ELSEπ               ImInAShell = -1π               EXIT DOπ            END IFπ          END IFπ        ELSEIF OwnerPSP = CurrentPSP THENπ          EXIT DO                         'Stop when we get to ourπ        END IF                             'own PSP.π                 π    CASE &H5A                               'Last block in chainπ        EXIT DOππ    CASE ELSE                               'Error - MCB's Destroyed!!π        EXIT DOππ    END SELECTπ    MemBlock& = MemBlock& + BlockSize& + 1      'Next block in chainπ LOOPπ EXIT FUNCTIONππDoDosCall:π    CALL INTERRUPTX(IntNo, Reg, Reg)πRETURNπEND FUNCTIONππFUNCTION WPeek% (Segment&, Offset%)ππ    'Peeks a word (two bytes) and returns it as a result of the functionππ    DEF SEG = Segment&π    TempL% = PEEK(Offset%)π    TempH% = PEEK(Offset% + 1)π    DEF SEGπ    POKE VARPTR(Result%), TempL%π    POKE VARPTR(Result%) + 1, TempH%π    WPeek% = Result%ππEND FUNCTIONππSean Smith                     ROTATING DNA ANALYSIS          FidoNet QUIK_BAS Echo          03-10-96 (09:59)       QB, QBasic, PDS        338  9160     DNA.BAS     '        Here's some cool code I found.  Does a dna string analysis.π'Definately something new!  Its on 4 different messages starting now.  Iπ'did not write this code though.  :(ππSCREEN 12ππCLSπmolcol = 15πbarcol = 8πscancol = 4πcenter = 75πinterval = .1πlength = 75πradius = 4πky = 275πjy = 250πiy = 225πhy = 200πgy = 175πfy = 150πey = 125πdy = 100πcy = 75πby = 50πy = 25πobs = 200πREM hscandir = 1πREM vscandir = 1ππLINE (0, 0)-(151, 301), 8, BπLINE (1, 1)-(150, 300), 7, BπLINE (2, 2)-(149, 299), 15, BπLINE (3, 3)-(148, 298), 7, BπLINE (4, 4)-(147, 297), 8, BππLOCATE 20, 1πCOLOR 8πPRINT "   [";πCOLOR 15πPRINT "DNA Analysis";πCOLOR 8πPRINT "]"πCOLOR 15πPRINT : COLOR 8: PRINT " ═"; : COLOR 7: PRINT "═";πCOLOR 15: PRINT "[ Building structure  ]";πCOLOR 7: PRINT "═"; : COLOR 8: PRINT "═"πmessage = 2πGOTO 20π5 FOR angle = 0 TO 36000 STEP intervalππREM -------SCAN--------ππ10πIF scanned = 1 THEN GOTO 20πIF message = 2 THEN LOCATE 22, 5: COLOR 15: PRINT " Scaning DNA String  "πIF hscan < 15 THEN hscandir = 1πIF hscan > 290 THEN hscandir = 0πIF hscandir = 0 THEN hscan = hscan - 5: LINE (5, hscan + 5)-(145, hscan + 5), 0πIF hscandir = 1 THEN hscan = hscan + 5: LINE (5, hscan - 5)-(145, hscan - 5), 0πLINE (5, hscan)-(145, hscan), scancolππIF vscan < 15 THEN vscandir = 1: pass = pass + .5πIF vscan > 140 THEN vscandir = 0:πIF vscandir = 0 THEN vscan = vscan - 5: LINE (vscan + 5, 5)-(vscan + 5, 295), 0πIF vscandir = 1 THEN vscan = vscan + 5: LINE (vscan - 5, 5)-(vscan - 5, 295), 0πLINE (vscan, 5)-(vscan, 295), scancolππIF pass = 3 THEN scanned = 1: message = 3: LINE (5, hscan)-(145, hscan), 0:πLINE (vscan, 5)-(vscan, 295), 0: FOR delay = 1 TO 5000: NEXT delay: GOTO 5πGOTO 20πIF scanned = 0 THEN GOTO 10πREM --------1------------π20π IF message = 3 THEN LOCATE 22, 5: COLOR 15: PRINT " Testing Integrity "π zangle = angle + 1π x1 = (center - (COS(zangle) * (length / 2)))π x2 = (center + (COS(zangle) * (length / 2)))π a1 = obs - (SIN(zangle) * (length))π a2 = obs + (SIN(zangle) * (length))ππ radiusx1 = (obs / a1) * radiusπ radiusx2 = (obs / a2) * radiusπ LINE (lastx1, y)-(lastx2, y), 0π CIRCLE (lastx1, y), lastrx1, 0π CIRCLE (lastx2, y), lastrx2, 0π LINE (x1, y)-(x2, y), barcolπ CIRCLE (x1, y), radiusx1, molcolπ CIRCLE (x2, y), radiusx2, molcolππ lastx1 = x1π lastx2 = x2π lastrx1 = radiusx1π lastrx2 = radiusx2πIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayπREM-----------2-------------π bangle = angle + 1.5π bx1 = (center - (COS(bangle) * (length / 2)))π bx2 = (center + (COS(bangle) * (length / 2)))π ba1 = obs - (SIN(bangle) * (length))π ba2 = obs + (SIN(bangle) * (length))ππ bradiusx1 = (obs / ba1) * radiusπ bradiusx2 = (obs / ba2) * radiusπ LINE (blastx1, by)-(blastx2, by), 0π CIRCLE (blastx1, by), blastrx1, 0π CIRCLE (blastx2, by), blastrx2, 0ππ LINE (bx1, by)-(bx2, by), barcolπ CIRCLE (bx1, by), bradiusx1, molcolπ CIRCLE (bx2, by), bradiusx2, molcolππ blastx1 = bx1π blastx2 = bx2π blastrx1 = bradiusx1π blastrx2 = bradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------3-------------π cangle = angle + 2π cx1 = (center - (COS(cangle) * (length / 2)))π cx2 = (center + (COS(cangle) * (length / 2)))π ca1 = obs - (SIN(cangle) * (length))π ca2 = obs + (SIN(cangle) * (length))ππ cradiusx1 = (obs / ca1) * radiusπ cradiusx2 = (obs / ca2) * radiusπ LINE (clastx1, cy)-(clastx2, cy), 0π CIRCLE (clastx1, cy), clastrx1, 0π CIRCLE (clastx2, cy), clastrx2, 0ππ LINE (cx1, cy)-(cx2, cy), barcolπ CIRCLE (cx1, cy), cradiusx1, molcolπ CIRCLE (cx2, cy), cradiusx2, molcolππ clastx1 = cx1π clastx2 = cx2π clastrx1 = cradiusx1π clastrx2 = cradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------4-------------π dangle = angle + 2.5π dx1 = (center - (COS(dangle) * (length / 2)))π dx2 = (center + (COS(dangle) * (length / 2)))π da1 = obs - (SIN(dangle) * (length))π da2 = obs + (SIN(dangle) * (length))ππ dradiusx1 = (obs / da1) * radiusπ dradiusx2 = (obs / da2) * radiusπ LINE (dlastx1, dy)-(dlastx2, dy), 0π CIRCLE (dlastx1, dy), dlastrx1, 0π CIRCLE (dlastx2, dy), dlastrx2, 0ππ LINE (dx1, dy)-(dx2, dy), barcolπ CIRCLE (dx1, dy), dradiusx1, molcolπ CIRCLE (dx2, dy), dradiusx2, molcolππ dlastx1 = dx1π dlastx2 = dx2π dlastrx1 = dradiusx1π dlastrx2 = dradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------5-------------π eangle = angle + 3!π ex1 = (center - (COS(eangle) * (length / 2)))π ex2 = (center + (COS(eangle) * (length / 2)))π ea1 = obs - (SIN(eangle) * (length))π ea2 = obs + (SIN(eangle) * (length))ππ eradiusx1 = (obs / ea1) * radiusπ eradiusx2 = (obs / ea2) * radiusπ LINE (elastx1, ey)-(elastx2, ey), 0π CIRCLE (elastx1, ey), elastrx1, 0π CIRCLE (elastx2, ey), elastrx2, 0ππ LINE (ex1, ey)-(ex2, ey), barcolπ CIRCLE (ex1, ey), eradiusx1, molcolπ CIRCLE (ex2, ey), eradiusx2, molcolππ elastx1 = ex1π elastx2 = ex2π elastrx1 = eradiusx1π elastrx2 = eradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------6-------------π fangle = angle + 3.5π fx1 = (center - (COS(fangle) * (length / 2)))π fx2 = (center + (COS(fangle) * (length / 2)))π fa1 = obs - (SIN(fangle) * (length))π fa2 = obs + (SIN(fangle) * (length))ππ fradiusx1 = (obs / fa1) * radiusπ fradiusx2 = (obs / fa2) * radiusπ LINE (flastx1, fy)-(flastx2, fy), 0π CIRCLE (flastx1, fy), flastrx1, 0π CIRCLE (flastx2, fy), flastrx2, 0ππ LINE (fx1, fy)-(fx2, fy), barcolπ CIRCLE (fx1, fy), fradiusx1, molcolπ CIRCLE (fx2, fy), fradiusx2, molcolππ flastx1 = fx1π flastx2 = fx2π flastrx1 = fradiusx1π flastrx2 = fradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------7-------------π gangle = angle + 4π gx1 = (center - (COS(gangle) * (length / 2)))π gx2 = (center + (COS(gangle) * (length / 2)))π ga1 = obs - (SIN(gangle) * (length))π ga2 = obs + (SIN(gangle) * (length))ππ gradiusx1 = (obs / ga1) * radiusπ gradiusx2 = (obs / ga2) * radiusπ LINE (glastx1, gy)-(glastx2, gy), 0π CIRCLE (glastx1, gy), glastrx1, 0π CIRCLE (glastx2, gy), glastrx2, 0ππ LINE (gx1, gy)-(gx2, gy), barcolπ CIRCLE (gx1, gy), gradiusx1, molcolπ CIRCLE (gx2, gy), gradiusx2, molcolππ glastx1 = gx1π glastx2 = gx2π glastrx1 = gradiusx1π glastrx2 = gradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------8-------------π hangle = angle + 4.5π hx1 = (center - (COS(hangle) * (length / 2)))π hx2 = (center + (COS(hangle) * (length / 2)))π ha1 = obs - (SIN(hangle) * (length))π ha2 = obs + (SIN(hangle) * (length))ππ hradiusx1 = (obs / ha1) * radiusπ hradiusx2 = (obs / ha2) * radiusπ LINE (hlastx1, hy)-(hlastx2, hy), 0π CIRCLE (hlastx1, hy), hlastrx1, 0π CIRCLE (hlastx2, hy), hlastrx2, 0ππ LINE (hx1, hy)-(hx2, hy), barcolπ CIRCLE (hx1, hy), hradiusx1, molcolπ CIRCLE (hx2, hy), hradiusx2, molcolππ hlastx1 = hx1π hlastx2 = hx2π hlastrx1 = hradiusx1π hlastrx2 = hradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------9-------------π iangle = angle + 5π ix1 = (center - (COS(iangle) * (length / 2)))π ix2 = (center + (COS(iangle) * (length / 2)))π ia1 = obs - (SIN(iangle) * (length))π ia2 = obs + (SIN(iangle) * (length))ππ iradiusx1 = (obs / ia1) * radiusπ iradiusx2 = (obs / ia2) * radiusπ LINE (ilastx1, iy)-(ilastx2, iy), 0π CIRCLE (ilastx1, iy), ilastrx1, 0π CIRCLE (ilastx2, iy), ilastrx2, 0ππ LINE (ix1, iy)-(ix2, iy), barcolπ CIRCLE (ix1, iy), iradiusx1, molcolπ CIRCLE (ix2, iy), iradiusx2, molcolππ ilastx1 = ix1π ilastx2 = ix2π ilastrx1 = iradiusx1π ilastrx2 = iradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------10-------------π jangle = angle + 5.5π jx1 = (center - (COS(jangle) * (length / 2)))π jx2 = (center + (COS(jangle) * (length / 2)))π ja1 = obs - (SIN(jangle) * (length))π ja2 = obs + (SIN(jangle) * (length))ππ jradiusx1 = (obs / ja1) * radiusπ jradiusx2 = (obs / ja2) * radiusπ LINE (jlastx1, jy)-(jlastx2, jy), 0π CIRCLE (jlastx1, jy), jlastrx1, 0π CIRCLE (jlastx2, jy), jlastrx2, 0ππ LINE (jx1, jy)-(jx2, jy), barcolπ CIRCLE (jx1, jy), jradiusx1, molcolπ CIRCLE (jx2, jy), jradiusx2, molcolππ jlastx1 = jx1π jlastx2 = jx2π jlastrx1 = jradiusx1π jlastrx2 = jradiusx2ππIF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delayππREM-----------11------------π kangle = angle + 6π kx1 = (center - (COS(kangle) * (length / 2)))π kx2 = (center + (COS(kangle) * (length / 2)))π ka1 = obs - (SIN(kangle) * (length))π ka2 = obs + (SIN(kangle) * (length))ππ kradiusx1 = (obs / ka1) * radiusπ kradiusx2 = (obs / ka2) * radiusπ LINE (klastx1, ky)-(klastx2, ky), 0π CIRCLE (klastx1, ky), klastrx1, 0π CIRCLE (klastx2, ky), klastrx2, 0ππ LINE (kx1, ky)-(kx2, ky), barcolπ CIRCLE (kx1, ky), kradiusx1, molcolπ CIRCLE (kx2, ky), kradiusx2, molcolππ klastx1 = kx1π klastx2 = kx2π klastrx1 = kradiusx1π klastrx2 = kradiusx2ππIF STAT = 0 THEN STAT = 1: GOTO 10πIF scanned = 0 THEN GOTO 10πIF INKEY$ <> "" THEN LOCATE 22, 5: PRINT " Analysis Aborted ": ENDπinterval = interval + .01πNEXT angleππDavid J. Arigan                BLOCK FILL                     FidoNet QUIK_BAS Echo          03-10-96 (20:22)       QB, QBasic, PDS        140  4232     BLOKFILL.BAS'Hmmm... I went back and examined my source.  I tried it with a few moreπ'shapes and managed to crash it.  It is also a little slow.  So I went backπ'and rewrote it with an entirely new algorithm that I developed.  I wasπ'kind of surprised to find as to how fast it filled in areas.  Dependingπ'on how complex the shape is, it can be a bit of a memory hog.  It uses bothπ'a stack and recursion to prevent stack and memory errors (which would haveπ'happened in a worse case scenario).  It may seem to pause on large fillπ'areas but don't worry... just give it a sec.  Well here it is:π'π' BLOKFILL.BASπ' Developed and written by David J. Ariganπ' Copyright (C)1996 - not to be used in any commercial product withoutπ' written consent from the author.πDEFINT A-ZππSCREEN 9ππ'LINE (100, 100)-(200, 150), 4π'LINE (100, 100)-(300, 100), 4π'LINE (300, 100)-(300, 150), 4π'LINE (300, 150)-(200, 150), 4π'fill 112, 102, 7, 4ππFOR i = 0 TO 310 STEP 6π  CIRCLE (320, 175), i, 4, 0, 6         ' very complex shapeπNEXTπfill 639, 0, 7, 4ππSUB fill (xp, yp, fc, bc)π  DIM xs(1500), ys(1500)π  xs(0) = xp: ys(0) = yp: stk = 1π  WHILE stk > 0π    stk = stk - 1π    x1 = xs(stk): fx1 = 0: y1 = ys(stk): fy1 = 0π    x2 = xs(stk): fx2 = 0: y2 = ys(stk): fy2 = 0π    WHILE (fx1 + fy1 + fx2 + fy2) <> 4π      IF fx1 = 0 THENπ        IF x1 = 0 THENπ          fx1 = 1π        ELSEπ          x1 = x1 - 1π          FOR i = y1 TO y2π            nc = POINT(x1, i)π            IF nc = fc OR nc = bc THEN fx1 = 1: x1 = x1 + 1: EXIT FORπ          NEXTπ        END IFπ      END IFπ      IF fx2 = 0 THENπ        IF x2 = 639 THENπ          fx2 = 1π        ELSEπ          x2 = x2 + 1π          FOR i = y1 TO y2π            nc = POINT(x2, i)π            IF nc = fc OR nc = bc THEN fx2 = 1: x2 = x2 - 1: EXIT FORπ          NEXTπ        END IFπ      END IFπ      IF fy1 = 0 THENπ        IF y1 = 0 THENπ          fy1 = 1π        ELSEπ          y1 = y1 - 1π          FOR i = x1 TO x2π            nc = POINT(i, y1)π            IF nc = fc OR nc = bc THEN fy1 = 1: y1 = y1 + 1: EXIT FORπ          NEXTπ        END IFπ      END IFπ      IF fy2 = 0 THENπ        IF y2 = 349 THENπ          fy2 = 1π        ELSEπ          y2 = y2 + 1π          FOR i = x1 TO x2π            nc = POINT(i, y2)π            IF nc = fc OR nc = bc THEN fy2 = 1: y2 = y2 - 1: EXIT FORπ          NEXTπ        END IFπ      END IFπ    WENDπ    LINE (x1, y1)-(x2, y2), fc, BFπ    m1 = -1: m2 = -1π    FOR i = x1 TO x2π      WHILE stk >= 1499π        fill xs(stk - 1), ys(stk - 1), fc, bc: stk = stk - 1π      WENDπ      IF y1 > 0 THENπ        nc = POINT(i, y1 - 1)π        IF nc <> bc AND nc <> fc THENπ          IF m1 = -1 THEN m1 = iπ          nc = POINT(i + 1, y1 - 1)π          IF i = x2 OR nc = bc OR nc = fc THENπ            xs(stk) = (i - m1) \ 2 + m1: ys(stk) = y1 - 1: stk = stk + 1π            m1 = -1π          END IFπ        END IFπ      END IFπ      IF y2 < 349 THENπ        nc = POINT(i, y2 + 1)π        IF nc <> bc AND nc <> fc THENπ          IF m2 = -1 THEN m2 = iπ          nc = POINT(i + 1, y2 + 1)π          IF i = x2 OR nc = bc OR nc = fc THENπ            xs(stk) = (i - m2) \ 2 + m2: ys(stk) = y2 + 1: stk = stk + 1π            m2 = -1π          END IFπ        END IFπ      END IFπ    NEXT iπ    m1 = -1: m2 = -1π    FOR i = y1 TO y2π      WHILE stk >= 1499π        fill xs(stk - 1), ys(stk - 1), fc, bc: stk = stk - 1π      WENDπ      IF x1 > 0 THENπ        nc = POINT(x1 - 1, i)π        IF nc <> bc AND nc <> fc THENπ          IF m1 = -1 THEN m1 = iπ          nc = POINT(x1 - 1, i + 1)π          IF i = y2 OR nc = bc OR nc = fc THENπ            xs(stk) = x1 - 1: ys(stk) = (i - m1) \ 2 + m1: stk = stk + 1π            m1 = -1π          END IFπ        END IFπ      END IFπ      IF x2 < 639 THENπ        nc = POINT(x2 + 1, i)π        IF nc <> bc AND nc <> fc THENπ          IF m2 = -1 THEN m2 = iπ          nc = POINT(x2 + 1, i + 1)π          IF i = y2 OR nc = bc OR nc = fc THENπ            xs(stk) = x2 + 1: ys(stk) = (i - m2) \ 2 + m2: stk = stk + 1π            m2 = -1π          END IFπ        END IFπ      END IFπ    NEXT iπ  WENDπEND SUBπRich Gordley                   ANOTHER PAINT REPLACEMENT      FidoNet QUIK_BAS Echo          03-09-96 (09:28)       QB, QBasic, PDS        168  3240     PAINTING.BAS'This was harder than I anticipated, but I was surprised at how fast it is.π'Could be made faster if the POINT functions were replaced by PEEKs but Iπ'didn't want to spend the time researching SCREEN 9 to implement themππDEFINT A-ZππSCREEN 9ππ'several shapes to show universal applicabilityππ'LINE (100, 100)-(300, 150), 4, Bπ'RECTANGLEπ'CIRCLE (112, 105), 30, 4π'CIRCLEπ' an hourglass like figureπLINE (200, 100)-(100, 50), 4πLINE (100, 50)-(300, 50), 4πLINE (300, 50)-(250, 100), 4πLINE (250, 100)-(300, 150), 4πLINE (300, 150)-(100, 150), 4πLINE (100, 150)-(200, 100), 4ππ'initv = 105   'FOR CIRCLE OR FOR RECTANGLEπ'inith = 112π'v = 105π'h = 112πinith = 225   'for the irregular polygonπinitv = 95πh = 225πv = 95πstuck = 0πfound = 0π     GOSUB makelineπ        DOπ        IF found = 1 THENπ        GOSUB relocπ        GOSUB makelineπ        END IFπ        LOOP UNTIL found <> 1ππ'relocate to initial coordinatesπ     v = initv: h = inithπ     GOSUB makeline2π     DOπ     IF found = 1 THENπ     GOSUB relocπ     GOSUB makeline2π     END IFπ     LOOP UNTIL found <> 1ππDOπA$ = INKEY$πLOOP UNTIL A$ <> ""πENDππsetpoint:π      PSET (h, v), 3πRETURNππmakeline:π'draws a line from initial position all the way to the left andπ'all the way to the right, looking for the first hole in theπ'ceiling it can find.ππ'move leftπfound = 0πholev = 0πholeh = 0π'look up before moving to see if there is a holeπDOπIF found = 0 THENπ'if no hole yet found then check for oneπIF POINT(h, v - 1) <> 4 THENπ          holev = v - 1: holeh = hπ          found = 1π     END IFπEND IFπh = h - 1ππIF POINT(h, v) <> 4 THEN   'can we move left?π  GOSUB setpoint    'mark and moveπELSEπ  h = h + 1π  stuck = 1πEND IFπLOOP UNTIL stuck = 1ππ'move rightπ'reset flagπstuck = 0πDOπIF found = 0 THEN 'if no hole yet found then check for oneπ     IF POINT(h, v - 1) <> 4 THENπ          holev = v - 1: holeh = hπ          found = 1π     END IFπEND IFπh = h + 1ππIF POINT(h, v) <> 4 THEN   'can we move right?π  GOSUB setpoint    'mark and moveπELSEπ  h = h - 1π  stuck = 1πEND IFπLOOP UNTIL stuck = 1ππstuck = 0πRETURNπππreloc:πh = holehπv = holevπRETURNππmakeline2:π'draws a line from initial position all the way to the left andπ'all the way to the right, looking for the first hole in theπ'floor it can find.ππ'move leftπfound = 0πholev = 0πholeh = 0π'look up before moving to see if there is a holeπDOπIF found = 0 THEN 'if no hole yet found then check for oneπ     IF POINT(h, v + 1) <> 4 THENπ          holev = v + 1: holeh = hπ          found = 1π     END IFπEND IFπh = h - 1ππIF POINT(h, v) <> 4 THEN   'can we move left?π  GOSUB setpoint    'mark and moveπELSEπ  h = h + 1π  stuck = 1πEND IFπLOOP UNTIL stuck = 1ππ'move rightπ'reset flagπstuck = 0πDOπIF found = 0 THEN 'if no hole yet found then check for oneπ     IF POINT(h, v + 1) <> 4 THENπ          holev = v + 1: holeh = hπ          found = 1π     END IFπEND IFπh = h + 1ππIF POINT(h, v) <> 4 THEN   'can we move right?π   GOSUB setpoint          'mark and moveπELSEπ  h = h - 1π  stuck = 1πEND IFππLOOP UNTIL stuck = 1ππstuck = 0ππRETURNππIsaac Grover                   LINE BOUNCER                   FidoNet QUIK_BAS Echo          03-18-96 (01:09)       QB, QBasic, PDS        25   1112     LNBOUNCE.BASSCREEN 12: RANDOMIZE TIMERπRow1% = INT(RND * 473) + 1: Column1% = INT(RND * 633) + 1πRow2% = INT(RND * 473) + 1: Column2% = INT(RND * 633) + 1πChangeInRow1% = 1: ChangeInColumn1% = 1πChangeInRow2% = 1: ChangeInColumn2% = 1πDO UNTIL INKEY$ <> ""π  LINE (Column1%, Row1%)-(Column2%, Row2%), 10π  IF Row1% <= 0 THEN ChangeInRow1% = -ChangeInRow1%π  IF Row1% >= 480 THEN ChangeInRow1% = -ChangeInRow1%π  IF Row2% <= 0 THEN ChangeInRow2% = -ChangeInRow2%π  IF Row2% >= 474 THEN ChangeInRow2% = -ChangeInRow2%π  IF Column1% <= 0 THEN ChangeInColumn1% = -ChangeInColumn1%π  IF Column1% >= 634 THEN ChangeInColumn1% = -ChangeInColumn1%π  IF Column2% <= 0 THEN ChangeInColumn2% = -ChangeInColumn2%π  IF Column2% >= 634 THEN ChangeInColumn2% = -ChangeInColumn2%π  OldColumn1% = Column1%: OldRow1% = Row1%π  OldColumn2% = Column2%: OldRow2% = Row2%π  Column1% = Column1% + ChangeInColumn1%π  Row1% = Row1% + ChangeInRow1%π  Column2% = Column2% + ChangeInColumn2%π  Row2% = Row2% + ChangeInRow2%π  FOR Delay% = 1 TO 5000: NEXTπ  LINE (OldColumn1%, OldRow1%)-(OldColumn2%, OldRow2%), 0πLOOP: SYSTEMππMathew Robertson               WRITE 640X480X16 .BMP FILES    FidoNet QUIK_BAS Echo          03-28-96 (17:45)       QB, QBasic, PDS        72   2834     SAVEBMP.BAS 'Programed by: Mathew Robertson    '1994π'This Is a very easy example of how to write 640x480x16 windowsπ'Bitmap files. It should not be that hard to change to make itπ'accept other sizes. The code is not commented to well so toπ'make such changes it will reguire abit of knowledge on theπ'subject and the time to make the changes, Unfortunaly I doπ'not have the time to do so. Other possible changes would beπ'to use direct memory access to read the screen instead of pointπ'which is rather slow. This type of change would make it workπ'faster on slower systems.π'Anyone who does want to make the changes and has the timeπ'to do so, go ahead. The one Restriction is if you improve onπ'the code that I get a copy of the modified code.π'This code is slow so if it looks like it has stopped its still goingπ'just after the original screen draw there is no more visual output.π'when finished running pop into your favorite graphics viewer thatπ'supports this format (most do support windows bitmaps)π'--------------------------------<cut here>----------------------------------π'Set the screen mode clear screenπSCREEN 12: CLSπ'Set up variablesπDIM B(1345), a&(16): kur = 0π'the name of the file to use to save the screen twoπfile$ = "test2.bmp"π'well this one is sort of self explainitoryπRANDOMIZE TIMERπ'Get some new colorsπFOR i = 0 TO 15πa&(i) = INT(RND * 64) + INT(RND * 64) * 256 + INT(RND * 64) * 65536πNEXTπ'Change the paletteπPALETTE USING a&(0)π'Draw something pretty on the screenπFOR i = 20 TO 400: CIRCLE (320, 240), i, i AND 15: NEXTπ'Well since we like are picture so much lets save it as a Windows BitmapπGOSUB SAVEASwBMPπ'end the programπENDπSAVEASwBMP: 'the main save routinesπ'open the file up to save to.πOPEN file$ FOR OUTPUT AS #1π'Select the Windows Bitmap dataπRESTORE wbmpdataπ'place the Windows Bitmap data into the file headerπFOR i = 0 TO 53: READ a: PRINT #1, CHR$(a); : NEXTπ'Place the colors used in the picture into the file headerπFOR i = 0 TO 15πPRINT #1, CHR$(((a&(kur + i) AND 65536 * 63) / 65536) * 4);πPRINT #1, CHR$(((a&(kur + i) AND 256 * 63) / 256) * 4);πPRINT #1, CHR$((a&(kur + i) AND 63) * 4);πPRINT #1, CHR$(0);πNEXTπ'make sure the variable point$ has nothing in itπpoint$ = ""π'start a loop for the y valueπFOR i = 479 TO 0 STEP -1π'start a loop for the x valueπFOR j = 0 TO 639 STEP 2π'collect and store color dataπpoint$ = point$ + CHR$(POINT(j, i) * 16 + POINT(j + 1, i))πNEXTπ'write color data to fileπPRINT #1, point$; : point$ = ""πNEXTπ'close fileπCLOSE : RETURNπ'information for the file header of a windows 16 color bitmapπwbmpdata:πDATA 66,77,118,88,2,0,0,0 : DATA 0,0,118,0,0,0,40,0πDATA 0,0,128,2,0,0,224,1,0 : DATA 0,1,0,4,0,0,0,0,0,0πDATA 88,2,0,132,61,0,0,132 : DATA 61,0,0,0,0,0,0,0,0,0: DATA 0,0,0,0ππStephan Doughty                GRAVITY LINES                  hbj@pop.ntplx.net              04-12-96 (14:36)       QB, QBasic, PDS        35   2337     GRAVLINE.BAS'Written By Stephen Doughtyπ'Watch, learn, play, enjoy.ππ5 REM Gravline.BASπ10 K = 35: S = 7: I = 1                         'K must be a multiple of 7π15 RANDOMIZE TIMERπ20 DEF FNR = (INT(RND * 5) + 5)                 'Line separationπ30 DEF FNZ = (INT((RND * 2) + 1) * 2 - 3)       'Makes -1 or 1π40 DIM X(K): DIM Y(K): DIM A(K): DIM B(K): DIM H(S): DIM C(S)π50 FOR Q = 0 TO 6: READ C(Q): H(Q) = K * (S - Q) / S: NEXT Q     'Loads line separation array with dataπ60 DATA 0,4,6,14,2,1,5                       π70 X = INT(RND * 640) + 1: XB = FNR * FNZ       'Picks X,Y and A,B pointsπ80 Y = INT(RND * 480) + 1: YB = FNR * FNZ       'and line step valuesπ90 A = INT(RND * 640) + 1: AB = FNR * FNZπ100 B = INT(RND * 480) + 1: BB = FNR * FNZπ110 G1 = FNZ: G2 = FNZ                          'Gravity (- or +)π120 SCREEN 12π130 M = X - A: N = Y - B: XY = (M * M + N * N): IF XY < 10 THEN G1 = -G1: G2 = -G2          'Lines 130-150 are a Gravity routineπ140 XB = XB - 100 * (G1 * M + XB / 3) / XY: YB = YB - 100 * (G1 * N + YB / 3) / XYπ150 AB = AB - 100 * (G2 * M + AB / 3) / XY: BB = BB - 100 * (G2 * N + BB / 3) / XYπ160 IF X + XB < 0 OR X + XB > 640 THEN XB = -SGN(XB) * FNR: YB = YB * FNZ: G1 = -SGN(G1)    'Checks for edges of screenπ170 IF Y + YB < 0 OR Y + YB > 480 THEN YB = -SGN(YB) * FNR: XB = XB * FNZ: G1 = -SGN(G1)    'if off screen then change line variableπ180 IF A + AB < 0 OR A + AB > 640 THEN AB = -SGN(AB) * FNR: BB = BB * FNZ: G2 = -SGN(G2)    'and change gravityπ190 IF B + BB < 0 OR B + BB > 480 THEN BB = -SGN(BB) * FNR: AB = AB * FNZ: G2 = -SGN(G2)π200 X = X + XB: Y = Y + YB: A = A + AB: B = B + BB      'Adds movement variables to XY coordinatesπ210 X(I) = X: Y(I) = Y: A(I) = A: B(I) = B              'Puts points in an arrayπ220 I = I + 1 + ((I = K) * K)                           'increments point arrayπ230 FOR Q = 6 TO 0 STEP -1                              'for next loop for color and eraseπ240 J = I + H(Q) + (I + H(Q) > K) * K                   'Divides array for color changeπ250 LINE (X(J), Y(J))-(A(J), B(J)), C(Q)π260 LINE (640 - X(J), 480 - Y(J))-(640 - A(J), 480 - B(J)), C(Q)π270 LINE (X(J), 480 - Y(J))-(A(J), 480 - B(J)), C(Q)π280 LINE (640 - X(J), Y(J))-(640 - A(J), B(J)), C(Q)π290 NEXT Qπ300 IF INKEY$ <> "" THEN END ELSE 130                   'Used to escapeπStephan Doughty                BOUNCING LINES IN 3D BOX       hbj@pop.ntplx.net              04-11-96 (13:51)       QB, QBasic, PDS        83   4971     BOWBOX.BAS  'This program is the first I have writen in 15 years. This explains the archaicπ'code used. You may play with it any way you please. I will try to explain itπ'with REM statements. It is a try at displaying three dots (xyz axis) and bouncingπ'them around a three-D cube. I have also tried to implement a kind of gravityπ'factor for each dot (- or +). the palette is played with also. And an attempt atπ'making the lines "fade" as they grow "old". Have fun, Stephen Doughtyπ'To contact me please use email address, hbj@ntplx.net (its a work address)π10 REM BOWBOX.BAS                 'program nameπ20 K = 6 * 4: S = 6: I = 1        'K must be a multiple of 6 to work properlyπ30 RANDOMIZE TIMER: SCREEN 12     'sets SCREEN and RNDπ40 DEF FNR = RND * 4 + 4          'determines line spacingπ50 DEF FNZ = INT((RND * 2) + 1) * 2 - 3       'Picks a number (-1 or 1)π60 DIM X(K): DIM Y(K): DIM Z(K): DIM A(K): DIM B(K): DIM C(K) 'XYZ ABC PQR are for holding line cordinatesπ70 DIM P(K): DIM Q(K): DIM R(K): DIM H(S)                     'H is for line redraw for fading linesπ80 FOR H = 1 TO 6: H(H) = K * (S - H) / S: NEXT H             'sets up line spacing using Kπ86 FOR S = 1 TO 13 STEP 3                          'Loads palettes for each lineπ88 PALETTE S, (S + 3) * 4 - 1                      'Redπ90 PALETTE S + 1, (S + 2) * 4 + (S + 2) * 4 * 256  'Greenπ92 PALETTE S + 2, (S + 1) * 4 * 65536              'Blueπ96 NEXT Sπ100 X = RND * 300 + 1: XB = FNR * FNZ              'Picks line coordinates forπ110 Y = RND * 300 + 1: YB = FNR * FNZ              'XYZ ABC PQR and there movement factorπ120 Z = RND * 300 + 1: ZB = FNR * FNZπ130 A = RND * 300 + 1: AB = FNR * FNZπ140 B = RND * 300 + 1: BB = FNR * FNZπ150 C = RND * 300 + 1: CB = FNR * FNZπ160 P = RND * 300 + 1: PB = FNR * FNZπ170 Q = RND * 300 + 1: QB = FNR * FNZπ180 R = RND * 300 + 1: RB = FNR * FNZπ190 G1 = FNZ: G2 = FNZ: G3 = FNZ                   'Initializes Gravity for each dot (- or +)π210 M1 = X - A: N1 = Y - B: O1 = Z - C             '210 to 260 set variables for gravity routineπ220 M2 = X - P: N2 = Y - Q: O2 = Z - Rπ230 M3 = A - P: N3 = B - Q: O3 = A - Rπ240 XYZ = SQR(M1 * M1 + N1 * N1 + O1 * O1)π250 ABC = SQR(M2 * M2 + N2 * N2 + O2 * O2)π260 PQR = SQR(M3 * M3 + N3 * N3 + O3 * O3)π270 IF XYZ < 10 THEN G1 = -G1: G2 = -G2            'If dots are to close together then change gravityπ280 IF ABC < 10 THEN G1 = -G1: G3 = -G3π290 IF PQR < 10 THEN G2 = -G2: G3 = -G3π300 XB = XB - G1 * (M1 + M2) / (XYZ + ABC)         ' Gravity routine (I think)π310 YB = YB - G1 * (N1 + N2) / (XYZ + ABC)         ' May not be correctπ320 ZB = ZB - G1 * (O1 + O2) / (XYZ + ABC)π330 AB = AB - G2 * (M1 + M3) / (XYZ + PQR)π340 BB = BB - G2 * (N1 + N3) / (XYZ + PQR)π350 CB = CB - G2 * (O1 + O3) / (XYZ + PQR)π360 PB = PB - G3 * (M2 + M3) / (ABC + PQR)π370 QB = QB - G3 * (N2 + N3) / (ABC + PQR)π380 RB = RB - G3 * (O2 + O3) / (ABC + PQR)π390 IF X + XB < 0 OR X + XB > 300 THEN XB = -SGN(XB) * FNR: G1 = -G1    'Checks for out-of-boundsπ400 IF Y + YB < 0 OR Y + YB > 300 THEN YB = -SGN(YB) * FNR: G1 = -G1    'if so, it changes movement factorπ410 IF Z + ZB < 0 OR Z + ZB > 300 THEN ZB = -SGN(ZB) * FNR: G1 = -G1    'and gravityπ420 IF A + AB < 0 OR A + AB > 300 THEN AB = -SGN(AB) * FNR: G2 = -G2π430 IF B + BB < 0 OR B + BB > 300 THEN BB = -SGN(BB) * FNR: G2 = -G2π440 IF C + CB < 0 OR C + CB > 300 THEN CB = -SGN(CB) * FNR: G2 = -G2π450 IF P + PB < 0 OR P + PB > 300 THEN PB = -SGN(PB) * FNR: G3 = -G3π460 IF Q + QB < 0 OR Q + QB > 300 THEN QB = -SGN(QB) * FNR: G3 = -G3π470 IF R + RB < 0 OR R + RB > 300 THEN RB = -SGN(RB) * FNR: G3 = -G3π480 X = X + XB: Y = Y + YB: Z = Z + ZB        'Adds line and movement factor togetherπ490 A = A + AB: B = B + BB: C = C + CBπ500 P = P + PB: Q = Q + QB: R = R + RBπ510 X(I) = X: Y(I) = Y: Z(I) = Z              'Remembers lines in arrayπ520 A(I) = A: B(I) = B: C(I) = C              'for fade routine andπ530 P(I) = P: Q(I) = Q: R(I) = R              'eraseπ540 I = I + 1 + ((I = K) * K)                 'Cycles line by adding one, if >K then (1) againπ545 GOSUB 1000: S = 16                        'Gosub 1000 refreshes cube. S is palette informationπ550 FOR H = 1 TO 6π560 J = I + H(H) + (I + H(H) > K) * K         'Which line fades nextπ565 S = S - 1π580 LINE (X(J) + Z(J) / 2, Y(J) + Z(J) / 2)-(A(J) + C(J) / 2, B(J) + C(J) / 2), Sπ585 S = S - 1 - (S = 0)π590 LINE (A(J) + C(J) / 2, B(J) + C(J) / 2)-(P(J) + R(J) / 2, Q(J) + R(J) / 2), Sπ595 S = S - 1 - (S = 0)π600 LINE (P(J) + R(J) / 2, Q(J) + R(J) / 2)-(X(J) + Z(J) / 2, Y(J) + Z(J) / 2), Sπ610 NEXT Hπ620 IF INKEY$ <> "" THEN END ELSE 210         'if any key then stopπ1000 COLOR 7                                  'Subroutine for cubeπ1010 LINE (0, 0)-(300, 300), , Bπ1050 LINE (150, 150)-(450, 450), , Bπ1090 LINE (0, 0)-(150, 150)π1100 LINE (0, 300)-(150, 450)π1110 LINE (300, 300)-(450, 450)π1120 LINE (300, 0)-(450, 150)π1130 RETURNπRichard Dale                   FLYING BEES & WASP             FidoNet QUIK_BAS Echo          04-21-96 (09:47)       QB, QBasic, PDS        90   3442     FLYBEES.BAS ' Works best when number of bees is 5 to 100 in INPUT statement for aπ' 386, slightly higher on 486.  Experiment, though.  A really highπ' number can provide a visual excitement, though may take some time toπ' set up the display.  May not run on CGA.  All I have is VGA.πDECLARE SUB wasp (wx%(), wy%())πDECLARE SUB bees (wx%(), wy%(), x%(), y%(), xv%(), yv%(), bcolor%)πDEFINT A-ZπCOMMON SHARED winW, winH, winX, winY, border, NoBeesπDEFLNG T: CLSπINPUT "Number of bees (1 to 10000)"; NoBeesπIF NoBees < 1 OR NoBees > 10000 THEN RUNπSCREEN 12: RANDOMIZE TIMER: CLSπDIM wx(0 TO 2): DIM wy(0 TO 2)πDIM x(0 TO 2, 1 TO NoBees): DIM y(0 TO 2, 1 TO NoBees)πDIM xv(1 TO NoBees): DIM yv(1 TO NoBees)πwinW = 0: winH = 0: winX = 0: winY = 0: maxx = 640: maxy = 480π' wasp will not go closer than this to the edgesπ    border = INT(RND * 75): winW = maxx: winH = maxyπ' Initialize the waspπ    wx(0) = 640 / 2: wy(0) = 480 / 2: wx(1) = wx(0): wy(1) = wy(0)π'Initialize the beesπ    FOR b = 1 TO NoBeesπ        x(0, b) = INT(RND * winW): x(1, b) = x(0, b)π        y(0, b) = INT(RND * winH): y(1, b) = y(0, b)π        xv(b) = 7 * (RND - .5): yv(b) = 7 * (RND - .5)π    NEXT bπ    bcolor = 9: t1 = TIMERπ    DO UNTIL INKEY$ <> ""π    CALL wasp(wx(), wy()):CALL bees(wx(), wy(), x(), y(), xv(), yv(), bcolor)π' change bee colorsπ    IF TIMER - t1 > 2 THENπ        bcolor = bcolor + 1π        IF bcolor = 14 THEN bcolor = 9π        t1 = TIMERπ    END IFπ    LOOP: SCREEN 0πENDπDEFINT TπSUB bees (wx(), wy(), x(), y(), xv(), yv(), bcolor)π' Do not let things settle downπ    bb = INT(NoBees * RND + 1)π    xv(bb) = xv(bb) + (RND - .5) * 3: yv(bb) = yv(bb) + (RND - .5) * 3πFOR b = 1 TO NoBeesπ' Age position arraysπ    x(2, b) = x(1, b): y(2, b) = y(1, b)π    x(1, b) = x(0, b): y(1, b) = y(0, b)π    dx = wx(1) - x(1, b): dy = wy(1) - y(1, b)π    distance = ABS(dx) + ABS(dy)    ' Approximationπ    IF distance = 0 THEN distance = 1π    bee.acc = 3π' Accelerateπ    xv(b) = xv(b) + dx * bee.acc / distanceπ    yv(b) = yv(b) + dy * bee.acc / distanceπ    bee.vel = 11π' Speed Checksπ    IF xv(b) > bee.vel THEN xv(b) = bee.velπ    IF xv(b) < -bee.vel THEN xv(b) = -bee.velπ    IF yv(b) > bee.vel THEN yv(b) = bee.velπ    IF yv(b) < -bee.vel THEN yv(b) = -bee.velπ' Move the beesπ    x(0, b) = x(1, b) + xv(b): y(0, b) = y(1, b) + yv(b)π    LINE (x(1, b), y(1, b))-(x(2, b), y(2, b)), 0π    LINE (x(0, b), y(0, b))-(x(1, b), y(1, b)), bcolorπNEXT bπEND SUBπSUB wasp (wx(), wy()) STATICπ' Age the arraysπ    wx(2) = wx(1): wx(1) = wx(0): wy(2) = wy(1): wy(1) = wy(0)π' Accelerate (bias random variable to ensure wasp convers entire screen)π    wasp.acc = 5π    wxv = wxv + INT((RND - .4) * wasp.acc)π    wyv = wyv + INT((RND - .4) * wasp.acc)π' Speed limit checksπ    wxv.max = INT(RND * 30) + 20: wyv.max = INT(RND * 30) + 20π    IF wxv > wxv.max THEN wxv = wxv.maxπ    IF wxv < -wxv.max THEN wxv = -wxv.maxπ    IF wyv > wyv.max THEN wyv = wyv.maxπ    IF wyv < -wyv.max THEN wyv = -wyv.maxπ' Move waspπ    wx(0) = wx(1) + wxv: wy(0) = wy(1) + wyvπ' Bounce checksπ    IF wx(0) < border OR wx(0) > winW - border - 1 THENπ        wxv = -wxv: wx(0) = wx(0) + wxvπ    END IFπ    IF wy(0) < border OR wy(0) > winH - border - 1 THENπ        wyv = -wyv: wy(0) = wy(0) + wyvπ    END IFπ    LINE (wx(1), wy(1))-(wx(2), wy(2)), 0π    LINE (wx(0), wy(0))-(wx(1), wy(1)), 15πEND SUBπMike Huff                      VGA/SVGA INTERRUPTS            FidoNet QUIK_BAS Echo          03-03-96 (20:38)       Text                   26   1180     GRAPHICS.FAQ'> inreg.ax = &H1C ' Sets 640X480X256 mode π'> CALL INTERRUPT(&H10, inreg, outreg)ππThis routine doesn't work so great on my machine (or at least my Trident VESAπcard.) You used the wrong value for the AX register. Here's a list thatπshould work on any VGA/SVGA machine:ππAX      Resolution     Text H/W         Segment      π--------------------------------------------------------------------------π5Ch for 640x400x256     (80x25)          A000h       π5Dh for 640x480x256     (80x30)          A000hπ6Ch for 640x480x16M     (80x30)          A000h       π5Bh for 800x600x16      (100x75)         A000h       π5Eh for 800x600x256     (100x75)         A000h       π5Fh for 1024x768x16     (128x48)         A000h       π62h for 1024x768x256    (128x48)         A000h       π63h for 1280x1024x16    (160x64)         A000h       π64h for 1280x1024x256   (160x64)         A000h       ππSome of the higher res or color modes may not work on every video card.πYou should also use direct memory writes instead of the extremely slow BIOSπ"PSET" routines. Here's an example in case you don't know:ππDEF SEG = &HA000πPOKE (Xmax& * Y& + X&), TheColorYaWant%πDEF SEGπWim Osterholt                  I/O PORT ADDRESSES             FidoNet QUIK_BAS Echo          02-06-94 (08:29)       Text                   2114 78926    PORTS.LST   [This file was provided by Wim Osterholt (2:512/56.198).]πLast Change: 2/6/94ππππ        XT, AT and PS/2     I/O port addressesππ      Do NOT consider this information as complete and accurate.π      If you want to do harware programming check ALWAYS theπ      appropriate data sheets. Be aware that erroneously programmingπ      can put your hardware or your data at risk. ππ      There is a memory mapped address in use for I/O functions of which Iπ      think it should be mentioned here. See at the end of this list.ππ-------------------------------------------------------------------------------π0000-001F ----    DMA 1    (first Direct Memory Access controller 8237)ππ0000    r/w    DMA channel 0  address    byte  0, then byte 1.π0001    r/w    DMA channel 0 word count byte 0, then byte 1.π0002    r/w    DMA channel 1  address    byte  0, then byte 1.π0003    r/w    DMA channel 1 word count byte 0, then byte 1.π0004    r/w    DMA channel 2  address    byte  0, then byte 1.π0005    r/w    DMA channel 2 word count byte 0, then byte 1.π0006    r/w    DMA channel 3  address    byte  0, then byte 1.π0007    r/w    DMA channel 3 word count byte 0, then byte 1.ππ0008    r    DMA channel 0-3 status registerπ         bit 7 = 1  channel 3 requestπ         bit 6 = 1  channel 2 requestπ         bit 5 = 1  channel 1 requestπ         bit 4 = 1  channel 0 requestπ         bit 3 = 1  channel terminal count on channel 3π         bit 2 = 1  channel terminal count on channel 2π         bit 1 = 1  channel terminal count on channel 1π         bit 0 = 1  channel terminal count on channel 0ππ0008    w    DMA channel 0-3 command registerπ         bit 7 = 1  DACK sense active highπ               = 0  DACK sense active lowπ         bit 6 = 1  DREQ sense active highπ               = 0  DREQ sense active lowπ         bit 5 = 1  extended write selectionπ               = 0  late write selectionπ         bit 4 = 1  rotating priorityπ               = 0  fixed priorityπ         bit 3 = 1  compressed timingπ               = 0  normal timingπ         bit 2 = 1  enable controllerπ               = 0  enable memory-to-memoryππ0009    w    DMA write request registerππ000A    r/w    DMA channel 0-3 mask registerπ         bit 7-3 = 0   reservedπ         bit 2     = 0   clear mask bitπ             = 1   set mask bitπ         bit 1-0 = 00  channel 0 selectπ             = 01  channel 1 selectπ             = 10  channel 2 selectπ             = 11  channel 3 selectππ000B    w    DMA channel 0-3 mode registerπ         bit 7-6 = 00  demand modeπ             = 01  single modeπ             = 10  block modeπ             = 11  cascade modeπ         bit 5     = 0   address increment selectπ             = 1   address decrement selectπ         bit 3-2 = 00  verify operationπ             = 01  write to memoryπ             = 10  read from memoryπ             = 11  reservedπ         bit 1-0 = 00  channel 0 selectπ             = 01  channel 1 selectπ             = 10  channel 2 selectπ             = 11  channel 3 selectππ000C    w    DMA clear byte pointer flip-flopπ000D    r    DMA read temporary registerπ000D    w    DMA master clearπ000E    w    DMA clear mask registerπ000F    w    DMA write mask registerππ-------------------------------------------------------------------------------π0010-001F ----    DMA controller (8237) on PS/2 model 60 & 80ππ-------------------------------------------------------------------------------π0018    w    PS/2 extended function registerππ-------------------------------------------------------------------------------π001A        PS/2 extended function executeππ-------------------------------------------------------------------------------π0020-003F ----    PIC 1    (Programmable Interrupt Controller 8259)ππ0020    w    PIC initialization command word ICW1π         bit 7-5 = 0  only used in 80/85 modeπ         bit 4     = 1  ICW1 is being issuedπ         bit 3     = 0  edge triggered modeπ             = 1  level triggered modeπ         bit 2     = 0  successive interrupt vectors use 8 bytesπ             = 1  successive interrupt vectors use 4 bytesπ         bit 1     = 0  cascade modeπ             = 1  single mode, no ICW3 neededπ         bit 0     = 0  no ICW4 neededπ             = 1  ICW4 neededππ0021    w    PIC  ICW2,ICW3,ICW4 after ICW1 to 0020π        ICW2:π         bit 7-3 = address lines A0-A3 of base vector address for PICπ         bit 2-0 = reservedπ        ICW3:π         bit 7-0 = 0  slave controller not attached to correspondingπ                  interrupt pinπ             = 1  slave controller attached to correspondingπ                  interrupt pinπ        ICW4:π         bit 7-5 = 0  reservedπ         bit 4     = 0  no special fully-nested modeπ             = 1  special fully-nested modeπ         bit 3-2 = 0x nonbuffered modeπ             = 10 buffered mode/slaveπ             = 11 buffered mode/masterπ         bit 1     = 0  normal EOIπ             = 1  Auto EOIπ         bit 0     = 0  8085 modeπ             = 1  8086/8088 modeππ0021    r/w    PIC master interrupt mask registerπ        OCW1:π         bit 7 = 0  enable parallel printer interruptπ         bit 6 = 0  enable diskette interruptπ         bit 5 = 0  enable fixed disk interruptπ         bit 4 = 0  enable serial port 1 interruptπ         bit 3 = 0  enable serial port 2 interruptπ         bit 2 = 0  enable video interruptπ         bit 1 = 0  enable keyboard, mouse, RTC interruptπ         bit 0 = 0  enable timer interruptπ        OCW2:π         bit 7-5 = 000    rotate in auto EOI mode (clear)π             = 001    nonspecific EOIπ             = 010    no operationπ             = 011    specific EOIπ             = 100    rotate in auto EOI mode (set)π             = 101    rotate on nonspecific EOI commandπ             = 110    set priority commandπ             = 111    rotate on specific EOI commandπ         bit 4     = 0    reservedπ         bit 3     = 0    reservedπ         bit 2-0    interrupt request to which the command appliesππ0020    r    PIC  interrupt request/in-service registers by OCW3π        request register:π         bit 7-0 = 0  no active request for the corresponding int. lineπ             = 1  active request for corresponding interrupt lineπ        in-service register:π         bit 7-0 = 0  corresponding line not currently being servicedπ             = 1  corresponding int. line currently being servicedππ0020    w    PIC OCW3π         bit 7     = 0   reservedπ         bit 6-5 = 0x  no operationπ             = 10  reset special maskπ             = 11  set special maskπ         bit 4     = 0   reservedπ         bit 3     = 1   reservedπ         bit 2     = 0   no poll commandπ             = 1   poll commandπ         bit 1-0 = 0x  no operationπ             = 10  read int.request register on next read at 0020π             = 11  read int.in-service register on next read 0020ππ-------------------------------------------------------------------------------π0022-002B ----    Intel 82355, part of chipset for 386sxπ         initialisation in POST will disable these addresses,π         only a hard reset will enable them again.ππ0022    r/w    82335 MCR memory configuration registerπ0024        82335 RC1 roll compare registerπ0026        82335 RC2 roll compare registerπ0028        82335 CC0 compare registerπ002A        82335 CC1 compare registerππ          values for CC0 and CC1:π          00F9,0000  enable range compare CC0 0-512K  CC1 disableπ          00F1,0000  enable range compare CC0 0-1024K CC1 disableπ          00F1,10F9  enable range compare CC0 0-1M    CC1 1M-1M5π          00E1,0000  enable range compare CC0 0-2M    CC1 disableπ          00E1,0000  enable range compare CC0 0-2M    CC1 disableπ          00C1,0000  enable range compare CC0 0-4M    CC1 disableπ          00C1,40E1  enable range compare CC0 0-4M    CC1 4M-6Mπ          0081,0000  enable range compare CC0 0-8M    CC1 disableππ-------------------------------------------------------------------------------π0038-003F ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π0040-005F ----    PIT  (Programmable Interrupt Timer  8253, 8254)π         XT & AT uses 40-43    PS/2 uses 40, 42,43,44, 47ππ0040    r/w    PIT  counter 0, counter divisor          (XT, AT, PS/2)π0041    r/w    PIT  counter 1, RAM refresh counter   (XT, AT)π0042    r/w    PIT  counter 2, cassette & speaker    (XT, AT, PS/2)ππ0043    r/w    PIT  mode port, control word register for counters 0-2π         bit 7-6 = 00  counter 0 selectπ             = 01  counter 1 select      (not PS/2)π             = 10  counter 2 selectπ         bit 5-4 = 00  counter latch commandπ             = 01  read/write counter bits 0-7 onlyπ             = 10  read/write counter bits 8-15 onlyπ             = 11  read/write counter bits 0-7 first, then 8-15π         bit 3-1 = 000 mode 0 selectπ             = 001 mode 1 select - programmable one shotπ             = x10 mode 2 select - rate generatorπ             = x11 mode 3 select - square wave generatorπ             = 100 mode 4 select - software triggered strobeπ             = 101 mode 5 select - hardware triggered strobeπ         bit 0     = 0   binary counter 16 bitsπ             = 1   BCD counterππ0044    r/w    PIT  counter 3 (PS/2, EISA)π        used as fail-safe timer. generates an NMI on time out.π        for user generated NMI see at 0462.ππ0047    w    PIT  control word register counter 3 (PS/2, EISA)π         bit 7-6 = 00  counter 3 selectπ             = 01  reservedπ             = 10  reservedπ             = 11  reservedπ         bit 5-4 = 00  counter latch command counter 3π             = 01  read/write counter bits 0-7 onlyπ             = 1x  reservedπ         bit 3-0 = 00ππ0048        EISAπ004A        EISAπ004B        EISAππ-------------------------------------------------------------------------------π0060-006F ----    Keyboard controller (8041, 8042)  (or PPI (8255) on XT)π         XT uses 60-63,     AT uses 60-64ππ         AT keyboard controller input port bit definitionsπ          bit 7      = 0  keyboard inhibitedπ          bit 6      = 0  CGA, else MDAπ          bit 5      = 0  manufacturing jumper installedπ          bit 4      = 0  system RAM 512K, else 640Kπ          bit 3-0      reservedππ         AT keyboard controller input port bit definitions by Compaqπ          bit 7      = 0  security lock is lockedπ          bit 6      = 0  Compaq dual-scan display, 1=non-Compaq displayπ          bit 5      = 0  system board dip switch 5 is ONπ          bit 4      = 0  auto speed selected, 1=high speed selectedπ          bit 3      = 0  slow (4MHz), 1 = fast (8MHz)π          bit 2      = 0  80287 installed, 1= no NDP installedπ          bit 1-0      reservedππ         AT keyboard controller output port bit definitionsπ          bit 7 =    keyboard data outputπ          bit 6 =    keyboard clock outputπ          bit 5 = 0  input buffer fullπ          bit 4 = 0  output buffer emptyπ          bit 3 =    reserved (see note)π          bit 2 =    reserved (see note)π          bit 1 =    gate A20π          bit 0 =    system resetπ        Note:    bits 2 and 3 are the turbo speed switch or passwordπ              lock on Award/AMI/Phoenix BIOSes.  These bits makeπ              use of nonstandard keyboard controller BIOSπ              functionality to manipulateπ                pin 23 (8041 port 22) as turbo switch for AWARDπ                pin 35 (8041 port 15) as turbo switch/pw lock forπ                Phoenixππ0060    r/w    KB controller data port or keyboard input buffer (ISA, EISA)π        should only be read from after status port bit0 = 1π        should only be written to if status port bit1 = 0π        keyboard commands (data goes also to port 0060):π         ED    dbl   set/reset mode indicators Caps Num Scrlπ         EE    sngl  diagnostic echo. returns EE.π         EF-F2    sngl  NOP (No OPeration). reserved for future useπ         F3    dbl   set typematic rate/delayπ         F4    sngl  enable keyboardπ         F5    sngl  disable keyboard. set default parametersπ         F6    sngl  set default parametersπ         F7-FD    sngl  NOPπ         FE    sngl  resend last scancodeπ         FF    sngl  perform internal power-on reset functionπππ0060    r    KeyBoard or KB controller data output buffer (via PPI on XT)ππ0061    w    KB controller port B (ISA, EISA)   (PS/2 port A is at 0092)π        system control port for compatibility with 8255π         bit 7    (1= IRQ 0 reset )π         bit 6-4    reservedπ         bit 3 = 1  channel check enableπ         bit 2 = 1  parity check enableπ         bit 1 = 1  speaker data enableπ         bit 0 = 1  timer 2 gate to speaker enableππ0061    r    KB controller port B control register (ISA, EISA)π        system control port for compatibility with 8255π         bit 7     parity check occurredπ         bit 6     channel check occurredπ         bit 5     mirrors timer 2 output conditionπ         bit 4     toggles with each refresh requestπ         bit 3     channel check statusπ         bit 2     parity check statusπ         bit 1     speaker data statusπ         bit 0     timer 2 gate to speaker statusππ0061    w    PPI  Programmable Peripheral Interface 8255 (XT only)π        system control portπ         bit 7 = 1  clear keyboardπ         bit 6 = 0  hold keyboard clock lowπ         bit 5 = 0  I/O check enableπ         bit 4 = 0  RAM parity check enableπ         bit 3 = 0  read low switchesπ         bit 2        reserved, often used as turbo switchπ         bit 1 = 1  speaker data enableπ         bit 0 = 1  timer 2 gate to speaker enableππ0062    r/w    PPI (XT only)π         bit 7 = 1  RAM parity checkπ         bit 6 = 1  I/O channel checkπ         bit 5 = 1  timer 2 channel outπ         bit 4        reserved π         bit 3 = 1  system board RAM size type 1π         bit 2 = 1  system board RAM size type 2π         bit 1 = 1  coprocessor installedπ         bit 0 = 1  loop in POSTππ0063    r/w    PPI (XT only) command mode register  (read dipswitches)π         bit 7-6 = 00  1 diskette driveπ             = 01  2 diskette drivesπ             = 10  3 diskette drivesπ             = 11  4 diskette drivesπ         bit 5-4 = 00  reservedπ             = 01  40*25 color (mono mode)π             = 10  80*25 color (mono mode)π             = 11  MDA 80*25π         bit 3-2 = 00  256K (using 256K chips)π             = 01  512K (using 256K chips)π             = 10  576K (using 256K chips)π             = 11  640K (using 256K chips)π         bit 3-2 = 00  64K  (using 64K chips)π             = 01  128K (using 64K chips)π             = 10  192K (using 64K chips)π             = 11  256K (using 64K chips)π         bit 1-0       reservedππ0064    r    KB controller read status (ISA, EISA)π         bit 7 = 1 parity error on transmission from keyboardπ         bit 6 = 1 receive timeoutπ         bit 5 = 1 transmit timeoutπ         bit 4 = 0 keyboard inhibitπ         bit 3 = 1 data in input register is commandπ             0 data in input register is dataπ         bit 2 = 0 system flag status 0=power up or reset 1=selftest OKπ         bit 1 = 1 input buffer full (input 60/64 has data for 8042)π         bit 0 = 1 output buffer full (output 60 has data for system)ππ0064    r     KB controller read status by Compaqπ         bit 7 = 1 parity error detected (11-bit format only). If anπ               error is detected, a Resend command is sent to theπ               keyboard once only, as an attempt to recover.π         bit 6 = 1 receive timeout. transmission didn't finish in 2mS.π         bit 5 = 1 transmission timeout errorπ                bit 5,6,7  causeπ                1 0 0  No clockπ                1 1 0  Clock OK, no responseπ                1 0 1  Clock OK, parity errorπ         bit 4 = 0 security lock engagedπ         bit 3 = 1 data in OUTPUT register is commandπ             0 data in OUTPUT register is dataπ         bit 2 = 0 system flag status 0=power up or reset 1=soft resetπ         bit 1 = 1 input buffer full (output 60/64 has data)π         bit 0 = 0 no new data in buffer (input 60 has data)ππ0064    w    KB controller input buffer (ISA, EISA)π        KB controller commands (data goes to port 0060):π         20    read  read byte zero of internal RAM, this is theπ                  last KB command send to 8041π              Compaq  Put current command byte on port 0060π                command structure:π                bit 7    reservedπ                bit 6 = 1 convert KB codes to 8086 scan codesπ                bit 5 = 0 use 11-bit codes, 1=use 8086 codesπ                bit 4 = 0 enable keyboard, 1=disable keyboardπ                bit 3 = 1 ignore security lock stateπ                bit 2      this bit goes into bit2 status reg.π                bit 1 = 0 reservedπ                bit 0 = 1 generate int. when output buffer fullπ         21-3F    read  reads the byte specified in the lower 5 bits ofπ                  the command in the 8041's internal RAMπ         60-7F    dbl   writes the data byte to the address specified inπ                  the 5 lower bits of the command.ππ                  Alternate description KB IO command 60 summary:π                   bit7 = 0 reservedπ                   bit6 =    IBM PC compatibility modeπ                   bit5 =    IBM PC modeπ                   bit4 =    disable kbπ                   bit3 =    inhibit overrideπ                   bit2 =    system flagπ                   bit1 = 0 reservedπ                   bit0 =    enableoutput buffer full interruptππ         60   Compaq  Load new command (60 to [64], command to [60])π         A1   Compaq  unknown speedfunction ??π         A2   Compaq  unknown speedfunction ??π         A3   Compaq  Enable system speed controlπ         A4   Compaq  Toggle speedπ         A5   Compaq  Special reed. the 8042 places the real valuesπ                  of port 2 except for bits 4 and 5 wich are givenπ                  a new definition in the output buffer. No outputπ                  buffer full is generated.π                if bit 5 = 0, a 9-bit keyboard is in useπ                if bit 5 = 1, an 11-bit keyboard is in useπ                if bit 4 = 0, outp-buff-full interrupt disabledπ                if bit 4 = 1, output-buffer-full int. enabledπ         A6   Compaq  unknown speedfunction ??π         AA    sngl  initiate self-test. will return 55 to data portπ              Compaq  Initializes ports 1 and 2, disables the keyboardπ                  and clears the buffer pointers. It then placesπ                  55 in the output buffer.π         AB    sngl  initiate interface test. result values:π                   0 = no errorπ                   1 = keyboard clock line stuck lowπ                   2 = keyboard clock line stuck highπ                   3 = keyboard data line is stuck lowπ                   4 = keyboard data line stuck highπ              Compaq   5 = Compaq diagnostic featureπ         AC    read  diagnostic dump. the contents of the 8041 RAM,π                  output port, input port, status word are send.π         AD    sngl  disable keyboard (sets bit 4 of commmand byte)π         AE    sngl  enable keyboard  (resets bit 4 of commmand byte)π         AF    AWARD Enhanced Command: read keyboard versionπ         C0    read  read input portπ              Compaq  Places status of input port in output buffer. useπ                  this command only when the output buffer is emptyπ         C1    AWARD Enhanced Command: poll input port Low nibbleπ         C2    AWARD Enhanced Command: poll input port High nibbleπ         D0    read  read output portπ              Compaq  Places byte in output port in output buffer. useπ                  this command only when the output buffer is emptyπ         D1    dbl   write output port. next byte written  to 0060π                  will be written to the 8041 output portπ              Compaq  The system speed bits are not set by this commandπ                  use commands A1-A6 (!) for speed functions.π         D2    AWARD Enhanced Command: write keyboard output bufferπ         D3    AWARD Enhanced Command: write pointing device out.buf.π         D4    AWARD Enhanced Command: write to auxiliary deviceπ         DD    sngl  disable address line A20. default in Real Modeπ         DF    sngl  enable address line A20π         E0    read  read test inputs. bit0 = T0 and bit1 = T1π         Exx    AWARD Enhanced Command: active output portπ         ED   Compaq  This is a two part command to control the stateπ                  of the NumLock CpasLock and ScrollLock LEDsπ                  The second byte contains the state to set LEDs.π                bit 7-3       reserved. should be set to 0.π                bit 2 = 0  Caps Lock LED offπ                bit 1 = 0  Num Lock LED offπ                bit 0 = 0  Scroll Lock LED offπ         F0-FF    sngl  pulse output port low for 6 microseconds.π                  bits 0-3 contain the mask for the bits to beπ                  pulsed. a bit is pulsed if its mask bit is zero.π                  bit0=system reset. Don't set to zero. Pulse only!ππgeneral note:     Keyboard controllers are widely different from each other.π         You cannot generally exchange them between different machines.πnote on Award:     Derived from Award's Enhanced KB controller advertising sheet.πnote on Compaq:     Derived from the Compaq Deskpro 386 Tech. Ref. Guide.ππ0065    r    communications port (Olivetti M24)ππ0068    w    HP-Vectra  control buffer (HP commands)π0069    r    HP-Vectra  SVC (keyboard request SerViCe port)π006A    w    HP-Vectra  clear processing, doneππ006C-006F    HP-HIL    (Human Interface Link = async. serial inputs 0-7)ππ-------------------------------------------------------------------------------π0070-007F ----    CMOS RAM/RTC (Real Time Clock  MC146818)ππ0070    w    CMOS RAM index register port (ISA, EISA)π         bit 7     = 1  NMI disabledπ             = 0  NMI enabledπ         bit 6-0      CMOS RAM index (64 bytes, sometimes 128 bytes)ππ        any write to 0070 should be followed by an action to 0071π        or the RTC wil be left in an unknown state.ππ0071    r/w    CMOS RAM data port (ISA, EISA)π        RTC registers:π        00    current second in BCDπ        01    alarm second   in BCDπ        02    current minute in BCDπ        03    alarm minute   in BCDπ        04    current hour in BCDπ        05    alarm hour   in BCDπ        06    day of week  in BCDπ        07    day of month in BCDπ        08    month in BCDπ        09    year  in BCD (00-99)π        0A    status register Aπ               bit 7 = 1  update in progressπ               bit 6-4 divider that identifies the time-basedπ                frequencyπ               bit 3-0 rate selection output  frequency and int. rateπ        0B    status register Bπ               bit 7 = 0  runπ                 = 1  haltπ               bit 6 = 1  enable periodic interruptπ               bit 5 = 1  enable alarm interruptπ               bit 4 = 1  enable update-ended interruptπ               bit 3 = 1  enable square wave interruptπ               bit 2 = 1  calendar is in binary formatπ                 = 0  calendar is in BCD formatπ               bit 1 = 1  24-hour modeπ                 = 0  12-hour modeπ               bit 0 = 1  enable daylight savings time. only in USA.π                  useless in Europe. Some DOS versions clearπ                  this bit when you use the DAT/TIME command.π        0C    status register Cπ               bit 7 =      interrupt request flagπ               bit 6 =      peridoc interrupt flagπ               bit 5 =      alarm interrupt flagπ               bit 4 =      update interrupt flagπ               bit 3-0      reservedπ        0D    status register Dπ               bit 7 = 1  Real-Time Clock has powerπ               bit 6-0      reservedπ        0E    diagnostics status byteπ               bit 7 = 0  RTC lost powerπ               bit 6 = 1  CMOS RAM checksum badπ               bit 5 = 1  invalid configuration information at POSTπ               bit 4 = 1  memory size error at POSTπ               bit 3 = 1  fixed disk/adapter failed initializationπ               bit 2 = 1  CMOS RAM time found invalidπ               bit 1 = 1  adapters do not match configuration (EISA)π               bit 0 = 1  time out reading an adapter ID (EISA)π        0F    shutdown status byteπ               00 = normal execution of POSTπ               01 = chip set initialization for real mode reentryπ               04 = jump to bootstrap codeπ               05 = issue an EOI an JMP to Dword ptr at 40:67π               06 = JMP to Dword ptrv at 40:67 without EOIπ               07 = return to INT15/87 (block move)π               08 = return to POST memory testπ               09 = return to INT15/87 (block move)π               0A = JMP to Dword ptr at 40:67 without EOIπ               0B = return IRETS through 40:67π        10    diskette drive type for A: and B:π               bit 7-4    drive type of drive 0π               bit 3-0    drive type of drive 1π                   = 0000       no driveπ                   = 0001       360Kπ                   = 0010       1M2π                   = 0011       720Kπ                   = 0100       1M44π                   = 0101-1111 reservedπ        11    reserved / AMI Extended CMOS setup (AMI Hi-Flex BIOS)π               bit 7   = 1     Typematic Rate Programmingπ               bit 6-5 = 00    Typematic Rate Delay 250 mSecπ               bit 4-0 = 00011 Typematic Rate 21.8 Chars/Secπ        12    fixed disk drive type for drive 0 and drive 1π               bit 7-4    drive type of drive 0π               bit 3-0    drive type of drive 1π                if either of the nibbles equals 0F, then bytesπ                19 an 1A are validπ        13    reserved / AMI Extended CMOS setup (AMI Hi-Flex BIOS)π               bit 7 = 1  Mouse Support Optionπ               bit 6 = 1  Above 1 MB Memory Test disableπ               bit 5 = 1  Memory Test Tick Sound disableπ               bit 4 = 1  Memory Parity Error Check enableπ               bit 3 = 1  Hit <ESC> Message Display disabledπ               bit 2 = 1  Hard Disk Type 47 Data Area at address 0:300π               bit 1 = 1  Wait For <F1> If Any Error enabledπ               bit 0 = 1  System Boot Up Num Lock is Onπ        14    equipment byteπ               bit 7-6     diskette drives installedπ                   = 00  1 drive installedπ                   = 01  2 drives installedπ                   = 10  reservedπ                   = 11  reservedπ               bit 5-4     primary displayπ                   = 00  adapter card with option ROM π                   = 01  40*25 colorπ                   = 10  80*25 colorπ                   = 11  monochromeπ               bit 3-2     reservedπ               bit 1   = 1  coprocessor installed (non-Weitek)π               bit 0        diskette drive avaliable for bootπ        15    LSB of systemn base memory in Kbπ        16    MSB of systemn base memory in Kbπ        17    LSB of total extended memory in Kbπ        18    MSB of total extended memory in Kbπ        19    drive C extension byteπ        1A    drive D extension byteπ        1B-27 reservedπ        1B/1C word to 82335 RC1 roll compare register at [24]π            (Phoenix)π        1D/1E word to 82335 RC2 roll compare register at [26]π            (Phoenix)π        28    HP-Vectra checksum over 29-2Dπ        29-2D reservedπ        29/2A word to Intel 82335 CC0 compare register atπ            [28](Phoenix)π        2B/2C word send to 82335 CC1 compare register at [2A]π            (Phoenix)π        2D    AMI Extended CMOS setup (AMI Hi-Flex BIOS)π              (Phoenix BIOS checks for the values AA or CC)π               bit 7 = 1  Weitek Processor Absentπ               bit 6 = 1  Floppy Drive Seek At Boot disabledπ               bit 5 = 1  System Boot Up Sequence  C:, A:π               bit 4 = 1  System Boot Up Speed is highπ               bit 3 = 1  Cache Memory enabledπ               bit 2 = 1  Internal Cache Memory     <1>π               bit 1-0      reservedπ        2E    CMOS MSB checksum over 10-2Dπ        2F    CMOS LSB checksum over 10-2Dπ        30    LSB of extended memory found above 1Mb at POSTπ        31    MSB of extended memory found above 1Mb at POSTπ        32    date century in BCDπ        33    information flagsπ               bit4 = bit4 from CPU register CR0   (Phoenix)π                  this bit is only known as INTEL RESERVEDπ        34-3F reserved    π        34     bit4 bit5 (Phoenix BIOS)π        3D/3E word to 82335 MCR memory config register atπ            [22](Phoenix)π        3D     bit3     base memsize 512/640  (Phoenix)π        3E     bit7 = 1     relocate enable       (Phoenix)π               bit1 = 1     shadow video enable   (Phoenix)π               bit0 = 1     shadow BIOS enable    (Phoenix)πππ        User Definable Drive Parameters are also stored in CMOS RAM:ππ        AMI (386sx BIOS 1989) first user definable drive (type 47)π         1B  L cylindersπ         1C  H cylindersπ         1D  headsπ         1E  L Write Precompensation Cylinderπ         1F  H Write Precompensation Cylinderπ         20  ??π         21  L cylinders parking zoneπ         22  H cylinders parking zoneπ         23  sectorsππ        AMI (386sx BIOS 1989) second user definable drive (type 48)π         24  L cylindersπ         25  H cylindersπ         26  headsπ         27  L Write Precompensation Cylinderπ         28  H Write Precompensation Cylinderπ         29  ??π         2A  L cylinders parking zoneπ         2B  H cylinders parking zoneπ         2C  sectorsππ        Phoenix (386BIOS v1.10.03 1988) 1st user definable drv (type48)π         20  L cylindersπ         21  H cylindersπ         22  headsπ         23  L Write Precompensation Cylinderπ         24  H Write Precompensation Cylinderπ         25  L cylinders parking zoneπ         26  H cylinders parking zoneπ         27  sectorsππ        Phoenix (386BIOS v1.10.03 1988) 2nd user definable drv (type49)π        (when PS/2-style password option is not used)π         35  L cylindersπ         36  H cylindersπ         37  headsπ         38  L Write Precompensation Cylinderπ         39  H Write Precompensation Cylinderπ         3A  L cylinders parking zoneπ         3B  H cylinders parking zoneπ         3C  sectorsππ0078        HP-Vectra  Hard Reset: NMI enable/disableπ         bit 7 = 0  disable & clear hard reset from HP-HIL controllerπ               = 1  enable hard reset from HP-HIL controller chipπ         bit 6-0    reservedππ-------------------------------------------------------------------------------π0078-007F ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π007C-007D ----    HP-Vectra  PIC 3   (Programmable Interrupt Controller 8259)π        cascaded to first controller.π        used for keyboard and input device interface.π007C    r/w    HP-Vectra  PIC 3  see at 0020  PIC 1π007D    r/w    HP-Vectra  PIC 3  see at 0021  PIC 1ππ-------------------------------------------------------------------------------π0080    w    Manufacturing Diagnostics portππ-------------------------------------------------------------------------------π0080-008F ----    DMA page registers   (74612)ππ0080    r/w    extra page register (temporary storage)π0081    r/w    DMA channel 2 address byte 2π0082    r/w    DMA channel 3 address byte 2π0083    r/w    DMA channel 1 address byte 2π0084    r/w    extra page registerπ0085    r/w    extra page registerπ0086    r/w    extra page registerπ0087    r/w    DMA channel 0 address byte 2π0088    r/w    extra page registerπ0089    r/w    DMA channel 6 address byte 2π0089    r/w    DMA channel 7 address byte 2π0089    r/w    DMA channel 5 address byte 2π008C    r/w    extra page registerπ008D    r/w    extra page registerπ008E    r/w    extra page registerπ008F    r/w    DMA refresh page registerππ-------------------------------------------------------------------------------π0090-009F ----    PS/2 POS (Programmable Option Select)ππ0090        Central arbitration control portπ0091        Card selection feedbackππ0092    r/w    PS/2 system control port A  (port B is at 0061)π         bit 7-6   any bit set to 1 turns activity light onπ         bit 5       reservedπ         bit 4 = 1 watchdog timout occurred π         bit 3 = 0 RTC/CMOS security lock (on password area) unlockedπ               = 1 CMOS locked (done by POST)π         bit 2       reservedπ         bit 1 = 1 indicates A20 activeπ         bit 0 = 0 system reset or writeπ             1 pulse alternate reset pin (alternate CPU reset)ππ0094    w    system board enable/setup registerπ         bit 7 = 1  enable functionsπ               = 0  setup functionsπ         bit 5 = 1  enables VGAπ               = 0  setup VGAππ0095        reservedππ0096    w    adapter enable /setup registerπ         bit 3 = 1  setup adaptersπ               = 0  enable registersππ0097        reservedππ-------------------------------------------------------------------------------π00A0-00AF ----    PIC 2    (Programmable Interrupt Controller 8259)ππ00A0    r/w    NMI mask register (XT)ππ00A0    r/w    PIC 2  same as 0020 for PIC 1π00A1    r/w    PIC 2  same as 0021 for PIC 1 except for OCW1:π         bit 7 = 0  reservedπ         bit 6 = 0  enable fixed disk interruptπ         bit 5 = 0  enable coprocessor exception interruptπ         bit 4 = 0  enable mouse interruptπ         bit 3 = 0  reservedπ         bit 2 = 0  reservedπ         bit 1 = 0  enable redirect cascadeπ         bit 0 = 0  enable real-time clock interruptππ-------------------------------------------------------------------------------π00B0-00BF ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π00C0      ----    TI  SN746496 programmable tone/noise generator    PCjrππ-------------------------------------------------------------------------------π00C0-00DF ----    DMA 2    (second Direct Memory Access controller 8237)ππ00C0    r/w    DMA channel 4 memory address bytes 1 and 0 (low) (ISA, EISA)π00C2    r/w    DMA channel 4 transfer count bytes 1 and 0 (low) (ISA, EISA)π00C4    r/w    DMA channel 5 memory address bytes 1 and 0 (low) (ISA, EISA)π00C6    r/w    DMA channel 5 transfer count bytes 1 and 0 (low) (ISA, EISA)π00C8    r/w    DMA channel 6 memory address bytes 1 and 0 (low) (ISA, EISA)π00CA    r/w    DMA channel 6 transfer count bytes 1 and 0 (low) (ISA, EISA)π00CC    r/w    DMA channel 7 memory address byte 0 (low), then 1 (ISA, EISA)π00CE    r/w    DMA channel 7 transfer count byte 0 (low), then 1 (ISA, EISA)ππ00D0    r    DMA channel 4-7 status register (ISA, EISA)π         bit 7 = 1  channel 7 requestπ         bit 6 = 1  channel 6 requestπ         bit 5 = 1  channel 5 requestπ         bit 4 = 1  channel 4 requestπ         bit 3 = 1  terminal count on channel 7π         bit 2 = 1  terminal count on channel 6π         bit 1 = 1  terminal count on channel 5π         bit 0 = 1  terminal count on channel 4ππ00D0    w    DMA channel 4-7 command register (ISA, EISA)π         bit 7 = 1  DACK sense active highπ               = 0  DACK sense active lowπ         bit 6 = 1  DREQ sense active highπ               = 0  DREQ sense active lowπ         bit 5 = 1  extended write selectionπ               = 0  late write selectionπ         bit 4 = 1  rotating priorityπ               = 0  fixed priorityπ         bit 3 = 1  compressed timingπ               = 0  normal timingπ         bit 2 = 0  enable controllerπ         bit 1 = 1  enable memory-to-memory transferπ         bit 0        .....ππ00D2    w    DMA channel 4-7 write request register (ISA, EISA)ππ00D4    w    DMA channel 4-7 write single mask register (ISA, EISA)π         bit 7-3      reservedπ         bit 2     = 0  clear mask bitπ             = 1  set mask bitπ         bit 1-0 = 00 channel 4 selectπ             = 01 channel 5 selectπ             = 10 channel 6 selectπ             = 11 channel 7 selectππ00D6    w    DMA channel 4-7 mode register (ISA, EISA)π         bit 7-6 = 00  demand modeπ             = 01  single modeπ             = 10  block modeπ             = 11  cascade modeπ         bit 5     = 0   address increment selectπ             = 1   address decrement selectπ         bit 4     = 0   autoinitialisation disableπ             = 1   autoinitialisation enableπ         bit 3-2 = 00  verify operationπ             = 01  write to memoryπ             = 10  read from memoryπ             = 11  reservedπ         bit 1-0 = 00  channel 4 selectπ             = 01  channel 5 selectπ             = 10  channel 6 selectπ             = 11  channel 7 selectππ00D8    w    DMA channel 4-7 clear byte pointer flip-flop (ISA, EISA)π00DA    r    DMA channel 4-7 read temporary register (ISA, EISA)π00DA    w    DMA channel 4-7 master clear (ISA, EISA)π00DC    w    DMA channel 4-7 clear mask register (ISA, EISA)π00DE    w    DMA channel 4-7 write mask register (ISA, EISA)ππ00E0        split address register, memory encoding registers PS/2m80 onlyππ-------------------------------------------------------------------------------π00F0-00F5 ----    PCjr Disk Controllerππ00F0        disk controllerπ00F2        disk controller control portπ00F4        disk controller status registerπ00F5        disk controller data portππ-------------------------------------------------------------------------------π00F0-00FF ----    coprocessor (8087..80387)ππ00F0        math coprocessor clear busy latchπ00F1        math coprocessor resetπ00F8-00FF    math coprocessorππ-------------------------------------------------------------------------------π00F9-00FF ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π0100-010F ----    CompaQ Tape drive adapter. alternate address at 0300ππ-------------------------------------------------------------------------------π0100-0107 ----    PS/2 POS (Programmable Option Select)ππ0100    r    POS register 0    Low adapter ID byteπ0101    r    POS register 1    High adapter ID byteππ0102    r/w    POS register 2    option select data byte 1π         bit 0 is card enable (CDEN)ππ0103    r/w    POS register 3    option select data byte 2π0104    r/w    POS register 4    option select data byte 3π0105    r/w    POS register 5    option select data byte 4π         bit 7    channel active (-CHCK)π         bit 6    channel statusππ0106    r/w    POS register 6    Low subaddress extensionπ0107    r/w    POS register 7    High subaddress extensionππ-------------------------------------------------------------------------------π0108-010F ----    8 digit LED info panel on IBM PS/2ππ010F    w    leftmost character on displayπ010E    w    second characterπ....    wπ0108    w    eighth characterππ-------------------------------------------------------------------------------π0130-013F ----    CompaQ SCSI adapter. alternate address at 0330ππ-------------------------------------------------------------------------------π0130-0133 ----    Adaptec 154xB/154xC SCSI adapter.π        alternate address at 0134, 0230, 0234 ,0330 and 0334ππ-------------------------------------------------------------------------------π0134-0137 ----    Adaptec 154xB/154xC SCSI adapter.π        alternate address at 0130, 0230, 0234 ,0330 and 0334ππ-------------------------------------------------------------------------------π0138-013F ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π0140-014F ----    SCSI (alternate Small Computer System Interface) adapterπ        (1st at 0340-034F)ππ-------------------------------------------------------------------------------π0140-0157 ----    RTC (alternate Real Time Clock for XT)     (1st at 0340-0357)ππ-------------------------------------------------------------------------------π0170-0177 ----    HDC 2    (2nd Fixed Disk Controller)   same as 01Fx (ISA, EISA)ππ-------------------------------------------------------------------------------π0178-017F ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π01E8-01EF ----    System Control. Laptop chipset: Headland HL21 & Acer M5105ππ01ED    r/w    select internal register. Data to/from 01EFπ01EE    rπ01EF    r/w    reg.π        5  = 1000xxxx  for low CPU clock speed (4MHz on Morse/Mitac)π           = 0xxxxxxx  for high CPU clock speed (16MHz on Morse/Mitac)ππ-------------------------------------------------------------------------------π01F0-01F7 ----    HDC 1    (1st Fixed Disk Controller)   same as 017x (ISA, EISA)ππ01F0    r/w    data registerππ01F1    r    error registerπ        diagnostic mode errors:π         bit 7-3    reservedπ         bit 2-1 = 001    no error detectedπ             = 010    formatter device errorπ             = 011    sector buffer errorπ             = 100    ECC circuitry errorπ             = 101    controlling microprocessor errorπ         operation mode:π          bit 7     = 1  bad block detectedπ             = 0  block OKπ          bit 6     = 1  uncorrectable ECC errorπ             = 0  no errorπ          bit 5          reservedπ          bit 4     = 1  ID foundπ             = 0  ID not foundπ          bit 3          reservedπ          bit 2     = 1  command completedπ             = 0  command abortedπ          bit 1     = 1  track 000 not foundπ             = 0  track 000 foundπ          bit 0     = 1  DAM not foundπ             = 0  DAM found (CP-3022 always 0)ππ01F1    w    WPC/4  (Write Precompensation Cylinder divided by 4)ππ01F2    r/w    sector countπ01F3    r/w    sector numberπ01F4    r/w    cylinder lowπ01F5    r/w    cylinder highππ01F6    r/w    drive/headπ         bit 7     = 1π         bit 6     = 0π         bit 5     = 1π         bit 4     = 0  drive 0 selectπ             = 1  drive 1 selectπ         bit 3-0      head select bitsππ01F7    r    status registerπ         bit 7 = 1  controller is executing a commandπ         bit 6 = 1  drive is readyπ         bit 5 = 1  write faultπ         bit 4 = 1  seek completeπ         bit 3 = 1  sector buffer requires servicingπ         bit 2 = 1  disk data read successfully correctedπ         bit 1 = 1  index - set to 1 each disk revolutionπ         bit 0 = 1  previous command ended in an errorππ01F7    w    command registerπ        commands:π         98 E5     check power mode    (IDE)π         90     execute drive diagnosticsπ         50     format trackπ         EC     identify drive        (IDE)π         97 E3     idle            (IDE)π         95 E1     idle immediatete    (IDE)π         91     initialize drive parametersπ         1x     recalibrateπ         E4     read buffer        (IDE)π         C8     read DMA with retry    (IDE)π         C9     read DMA without retry (IDE)π         C4     read multiplec        (IDE)π         20     read sectors with retryπ         21     read sectors without retryπ         22     read long with retryπ         23     read long without retryπ         40     read verify sectors with retryπ         41     read verify sectors without retryπ         7x     seekπ         EF     set features        (IDE)π         C6     set multiple mode    (IDE)π         99 E6     set sleep mode        (IDE)π         96 E2     standby        (IDE)π         94 E0     standby immediate    (IDE)π         E8     write buffer        (IDE)π         CA     write DMA with retry    (IDE)π         CB     write DMA with retry    (IDE)π         C5     write multiple        (IDE)π         E9     write same        (IDE)π         30     write sectors with retryπ         31     write sectors without retryπ         32     write long with retryπ         33     write long without retryπ         3C     write verify        (IDE)π         9A     vendor unique        (IDE)π         C0-C3     vendor unique        (IDE)π         8x     vendor unique        (IDE)π         F0-F4     EATA standard        (IDE)π         F5-FF     vendor unique        (IDE)ππ-------------------------------------------------------------------------------π01F9-01FF ----    PC radio by CoZet Info Systemsπ        The I/O address range is dipswitch selectable from:π           038-03F and 0B0-0BFπ           078-07F and 0F9-0FFπ           138-13F and 1B0-1BFπ           178-17F and 1F9-1FFπ           238-23F and 2B0-2BFπ           278-27F and 2F0-2FFπ           338-33F and 3B0-3BFπ           378-37F and 3F0-3FFπ        All of these addresses show a readout of FF in initial state.π        Once started, all of the addresses show     FB, whatever mightπ        happen.ππ-------------------------------------------------------------------------------π0200-020F ----    Game port reserved I/O address space  π0200-0207 ----    Game port, eight identical addresses on some boardsππ0201    r    read joystick position and statusπ         bit 7    status B joystick button 2 / D paddle buttonπ         bit 6    status B joystick button 1 / C paddle buttonπ         bit 5    status A joystick button 2 / B paddle buttonπ         bit 4    status A joystick button 1 / A paddle buttonπ         bit 3    B joystick Y coordinate       / D paddle coordinateπ         bit 2    B joystick X coordinate       / C paddle coordinateπ         bit 1    A joystick Y coordinate       / B paddle coordinateπ         bit 0    A joystick X coordinate       / A paddle coordinateππ    w    fire joysticks four one-shotsππ-------------------------------------------------------------------------------π0210-0217 ----    Expansion unit (XT)ππ0210    w    latch expansion bus dataπ    r    verify expansion bus dataπ0211    w    clear wait, test latchπ    r    High byte data addressπ0212    r    Low byte data addressπ0213    w    0=enable,  1=disable expansion unitπ0214    w    latch data  (receiver card port)π    r    read data   (receiver card port)π0215    r    High byte of address, then Low byte   (receiver card port)ππ-------------------------------------------------------------------------------π0220-0227 ----    Soundblaster PRO and SSB 16 ASPππ-------------------------------------------------------------------------------π0220-022F ----    Soundblaster PRO 2.0ππ-------------------------------------------------------------------------------π0220-022F ----    Soundblaster PRO 4.0π0220    r    left FM status portπ0220    w    left FM music register address port (index)π0221    r/w    left FM music data portπ0222    r    right FM status portπ0222    w    right FM music register address port (index)π0223    r/w    right FM music data portπ0224    w    mixer register address port (index)π0225    r/w    mixer data portπ0226    w    DSP resetπ0228    r    FM music status portπ0228    w    FM music register address port (index)π0229    w    FM music data portπ022A    r    DSP read data (voice I/O and Midi)π022C    w    DSP write data / write commandπ022C    r    DSP write buffer status (bit 7)π022E    r    DSP data available status (bit 7)ππ        The FM music is accessible on 0388/0389 for compatibility.ππ-------------------------------------------------------------------------------π0230-0233 ----    Adaptec 154xB/154xC SCSI adapter.π        alternate address at 0130, 0134, 0230, 0330 and 0334ππ-------------------------------------------------------------------------------π0234-0237 ----    Adaptec 154xB/154xC SCSI adapter.π        alternate address at 0130, 0134, 0230 ,0330 and 0334ππ-------------------------------------------------------------------------------π0240-0257 ----    RTC (alternate Real Time Clock for XT)     (1st at 0340-0357)π        (used by TIMER.COM v1.2 which is the 'standard' timer program)ππ-------------------------------------------------------------------------------π0258-025F ----    Intel Above Boardππ-------------------------------------------------------------------------------π0278-027E ----    parallel printer port, same as 0378 and 03BCππ0278    w    data portπ0279    r/w    status portπ027A    r/w    control portππ-------------------------------------------------------------------------------π02A2-02A3 ----    MSM58321RS clockππ-------------------------------------------------------------------------------π02B0-02BF ----    Trantor SCSI adapterππ-------------------------------------------------------------------------------π02B0-02DF ----    alternate EGA,    primary EGA at 03C0ππ-------------------------------------------------------------------------------π02C0-02Cx ----    AST-clockππ-------------------------------------------------------------------------------π02E0-02EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)π        (GAB 0 on XT)π02E1        GPIB (adapter 0)π02E2π02E3ππ-------------------------------------------------------------------------------π02E0-02EF ----    data aquisition     (AT)ππ02E2        data aquisition (adapter 0)π02E3        data aquisition (adapter 0)ππ-------------------------------------------------------------------------------π02E8-02EF ----    serial port, same as 02F8, 03E8, and 03F8ππ-------------------------------------------------------------------------------π02F8-02FF ----    serial port, same as 02E8, 02F8, and 03F8ππ02F8    w    transmitter holding registerπ02F8    r    receiver buffer registerπ    r/w    divisor latch, low byte      when DLAB=1π02F9    r/w    divisor latch, high byte  when DLAB=1π    r/w    interrupt enable register when DLAB=0π02FA    r    interrupt identification registerπ02FB    r/w    line control registerπ02FC    r/w    modem control registerπ02FD    r    line status registerπ02FF    r/w    scratch registerππ-------------------------------------------------------------------------------π0300-0301 ---- Soundblaster 16 ASP MPU-Midiππ-------------------------------------------------------------------------------π0300-031F ----    prototype cardsπ        Periscope hardware debuggerππ-------------------------------------------------------------------------------π0300-030F ----    Philips CD-ROM player CM50π0310-031F ----    Philips CD-ROM player CM50ππ-------------------------------------------------------------------------------π0320-0323 ----    XT HDC 1   (Hard Disk Controller)ππ0320    r/w    data registerππ0321    w    reset controllerπ    r    read controller hardware statusπ         bit 7-6 = 0π         bit 5          logical unit numberπ         bit 4-2 = 0π         bit 1     = 0  no errorπ         bit 0     = 0 ππ0322    r    read DIPswitch setting on XT controller cardπ    w    generate controller-select pulseπ0323    w    write pattern to DMA and INT mask registerππ0324-0327 ----    XT HDC 2   (Hard Disk Controller)π0328-032B ----    XT HDC 3   (Hard Disk Controller)π032C-032F ----    XT HDC 4   (Hard Disk Controller)ππ-------------------------------------------------------------------------------π0330-0331 ----    MIDI interfaceππ-------------------------------------------------------------------------------π0330-0333 ----    Adaptec 154xB/154xC SCSI adapter. default address.π        alternate address at 0130, 0134, 0230, 0234 and 0334ππ-------------------------------------------------------------------------------π0330-033F ----    CompaQ SCSI adapter. alternate address at 0130ππ-------------------------------------------------------------------------------π0330-033F ----    Philips CD-ROM player CM50ππ-------------------------------------------------------------------------------π0334-0337 ----    Adaptec 154xB/154xC SCSI adapter.π        alternate address at 0130, 0134, 0230 ,0234 and 0330ππ-------------------------------------------------------------------------------π0338      ----    AdLib soundblaster cardππ-------------------------------------------------------------------------------π0340-034F ----    Philips CD-ROM player CM50ππ-------------------------------------------------------------------------------π0340-034F ----    SCSI (1st Small Computer System Interface) adapterπ        (alternate at 0140-014F)ππ-------------------------------------------------------------------------------π0340-0357 ----    RTC (1st Real Time Clock for XT), (alternate at 0240-0257)π        (used by TIMER.COM v1.2 which is the 'standard' timer program)ππ0340    r/w    0.01 seconds  0-99π0341    r/w    0.1 seconds   0-99π0342    r/w    seconds          0-59π0343    r/w    minutes          0-59π0343    r/w    hours          0-23π0345    r/w    day of week   1-7π0346    r/w    day of month  1-31π0347    r/w    month          1-12π0348π0349    r/w    year          0-99π034Aπ034Bπ034Cπ034Dπ034Eπ034Fπ0350    r    status?π0351    π0352π0353π0354    r    status?π0355π0356π0357ππ-------------------------------------------------------------------------------π0348-0357 ----    DCA 3278ππ-------------------------------------------------------------------------------π0360-036F ----    PC network (AT)π0360-0367 ----    PC network (XT only)ππ-------------------------------------------------------------------------------π0370-0377 ----    FDC 2  (2nd Floppy Disk Controller 8272)  same as 03F0ππ0372    w    diskette controller DOR (Digital Output Register)π0374    r    diskette controller status registerπ0375    r/w    diskette controller data registerπ0376    r/w    FIXED disk controller data registerπ0377    r    diskette controller DIR (Digital Input Register)π0377    w    select register for diskette data transfer rateππ-------------------------------------------------------------------------------π0378-037A ----    parallel printer port, same as 0278 and 03BCππ0378    w    data portπ0379    r/w    status portπ037A    r/w    control portππ-------------------------------------------------------------------------------π0380-038F ----    2nd Binary Synchronous Data Link Control adapter (see 03A0)ππ0380    r/w     on board 8255 port A, internal/external senseπ0381    r/w     on board 8255 port B, external modem interfaceπ0382    r/w     on board 8255 port C, internal control and gatingπ0383    r/w     on board 8255 mode registerπ0384    r/w     on board 8253 channel square wave generatorπ0385    r/w     on board 8253 channel 1 inactivity time-outπ0386    r/w     on board 8253 channel 2 inactivity time-outπ0387    r/w     on board 8253 mode registerπ0388    r/w     on board 8273 read: status  write: commandπ0389    r/w     on board 8273 read: response  write: parameterπ038A    r/w     on board 8273 transmit interrupt statusπ038B    r/w     on board 8273 receiver interrupt statusπ038C    r/w     on board 8273 dataππ-------------------------------------------------------------------------------π0388-0389 ---- Soundblaster PRO FM-Chipπ0388-038B ---- Soundblaster 16 ASP FM-Chipππ-------------------------------------------------------------------------------π0390-039F ----    Cluster adapter (AT)ππ0390-0393    (adapter 0)    (XT)ππ-------------------------------------------------------------------------------π03A0-03AF ----    1st SDLC (Binary Synchronous Data Link Control adapter)ππ0380    r/w     on board 8255 port A, internal/external senseπ0381    r/w     on board 8255 port B, external modem interfaceπ0382    r/w     on board 8255 port C, internal control and gatingπ0383    r/w     on board 8255 mode registerπ0384    r/w     on board 8253 counter 0 unusedπ0385    r/w     on board 8253 channel 1 inactivity time-outπ0386    r/w     on board 8253 channel 2 inactivity time-outπ0387    r/w     on board 8253 mode registerπ0388    r/w     on board 8251 dataπ0389    r/w     on board 8251 command/mode/status registerππ-------------------------------------------------------------------------------π03B0-03BF ----    MDA  (Monochrome Display Adapter based on 6845)ππ03B0        same as 03B4π03B1        same as 03B5π03B2        same as 03B4π03B3        same as 03B5π03B4    w    MDA CRT index register     (EGA/VGA)π        selects which register (0-11h) is to be accessed through 3B5π03B5    r/w    MDA CRT data register     (EGA/VGA)π        selected by port 3B4. registers C-F may be readπ         00  horizontal totalπ         01  horizontal displayedπ         02  horizontal sync positionπ         03  horizontal sync pulse widthπ         04  vertical totalπ         05  vertical displayedπ         06  vertical sync positionπ         07  vertical sunc pulse widthπ         08  interlace modeπ         09  maximum scan linesπ         0A  cursor startπ         0B  cursor endπ         0C  start address highπ         0D  start address lowπ         0E  cursor location highπ         0F  cursor location lowπ         10  light pen highπ         11  light pen lowπ03B6        same as 03B4π03B7        same as 03B5π03B8    r/w    MDA mode control registerπ         bit 7 not usedπ         bit 6 not usedπ         bit 5 enable blinkπ         bit 4 not usedπ         bit 3 video enableπ         bit 2 not usedπ         bit 1 not usedπ         bit 0 high resolution modeππ03B9        reserved for color select register on color adapterππ03BA    r    CRT status register     EGA/VGA: input status 1 registerπ         bit 7-4 reservedπ         bit 3     black/white videoπ         bit 2-1 reservedπ         bit 0     horizontal driveππ         bit 7     (MSD says) if this bit changes within 8000h reads thenπ          bit 6-4 = 000 = adapter is Hercules or compatibleπ                001 = adapter is Hercules+π                101 = adapter is Hercules InColorπ                  else: adapter is unknownππ03BA    w    EGA/VGA feature control registerππ03BB        reserved for light pen strobe resetππ-------------------------------------------------------------------------------π03BC-03BF ----    parallel printer port, same as 0278 and 0378ππ03BC    w    data portπ03BD    r/w    status portπ         bit 7 = 0  busyπ         bit 6 = 0  acknowledgeπ         bit 5 = 1  out of paperπ         bit 4 = 1  printer is selectedπ         bit 3 = 0  errorπ         bit 2 = 0  IRQ has occurredπ         bit 1-0    reservedππ03BE    r/w    control portπ         bit 7-5    reservedπ         bit 4 = 1  enable IRQπ         bit 3 = 1  select printerπ         bit 2 = 0  initialize printerπ         bit 1 = 1  automatic line feedπ         bit 0 = 1  strobeππ-------------------------------------------------------------------------------π03BF    r/w    Hercules configuration switch registerπ         bit 7-2π         bit 1 = 0  disables upper 32K of graphics mode bufferπ             1  enables upper 32K of graphics mode bufferπ         bit 0 = 0  prevents graphics modeπ             1  allows graphics modeππ-------------------------------------------------------------------------------π03C0-03CF ----    EGA  (1st Enhanced Graphics Adapter)    alternate at 02C0ππ03C0    (r)/w    EGA VGA ATC index/data registerπ03C1    r    VGA    other attribute registerπ03C2    r    EGA VGA input status 0 registerπ    w    VGA    miscellaneous output registerπ03C3    r/w    VGA    video subsystem enableπ03C4    w    EGA    TS index registerπ    r/w    VGA    sequencer index registerπ03C5    w    EGA    TS data registerπ    r/w    VGA    other sequencer registerπ03C6    r/w    VGA    PEL mask registerπ03C7    r/w    VGA    PEL address read modeπ    r    VGA    DAC state registerπ03C8    r/w    VGA    PEL address write modeπ03C9    r/w    VGA    PEL data registerπ03CA    w    EGA    graphics 2 position registerπ    r    VGA    feature control registerπ03CC    w    EGA    graphics 1 position registerπ    r    VGA    miscellaneous output registerπ03CE    w    EGA    GDC index registerπ    r/w    VGA    graphics address registerπ03CF    w    EGA    GDC data registerπ    r/w    VGA    other graphics registerππ-------------------------------------------------------------------------------π03D0-03DF ----    CGA   (Color Graphics Adapter)ππ03D0        same as 03D4π03D1        same as 03D5π03D2        same as 03D4π03D3        same as 03D5π03D4    w    CRT (6845) index register   (EGA/VGA)π        selects which register (0-11h) is to be accessed through 3B5π03D5    w    CRT (6845) data register    (EGA/VGA)π        selected by port 3B4. registers C-F may be readπ         (for registers see at 3B5)π03D6        same as 03D4π03D7        same as 03D5π03D8    r/w    CGA mode control register  (except PCjr)π         bit 7-6      not usedπ         bit 5     = 1  blink enabledπ         bit 4     = 1  640*200 graphics modeπ         bit 3     = 1  video enabledπ         bit 2     = 1  monochrome signalπ         bit 1     = 0  text modeπ             = 1  320*200 graphics modeπ         bit 0     = 0  40*25 text modeπ             = 1  80*25 text modeππ03D9    r/w    CGA palette registerπ         bit 7-6      not usedπ         bit 5     = 0 active color set: red, green brownπ             = 1 active color set: cyan, magenta, whiteπ         bit 4         intense colors in graphics, background colors textπ         bit 3         intense border in 40*25, intense background inπ                 320*200, intense foreground in 640*200π         bit 2         red border in 40*25, red background in 320*200,π                 red foreground in 640*200π         bit 1         green border in 40*25, green background inπ                 320*200, green foreground in 640*200π         bit 0         blue border in 40*25, blue background in 320*200,π                 blue foreground in 640*200ππ03DA    r    CGA status register    EGA/VGA: input status 1 registerπ         bit 7-4     not usedπ         bit 3 = 1   in vertical retraceπ         bit 2 = 1   light pen switch is offπ         bit 1 = 1   positive edge from light pen has set triggerπ         bit 0 = 0   do not use memoryπ               = 1   memory access without interfering with displayππ03DA    w    EGA/VGA feature control registerππ03DB    w    clear light pen latchπ03DC    r/w    preset licht pen latchππ03DF        CRT/CPU page register  PCjr onlyππ-------------------------------------------------------------------------------π03E8-03EF ----    serial port, same as 02E8, 02F8, and 03F8ππ-------------------------------------------------------------------------------π03F0-03F7 ----    FDC 1  (1st Floppy Disk Controller 8272)  same as 0370ππ03F0        diskette controller status A (PS/2)π         bit 7     interrupt pendingπ         bit 6     second drive installedπ         bit 5     stepπ         bit 4     track 0π         bit 3     head 1 selectπ         bit 2     indexπ         bit 1     write protectπ         bit 0     directionππ03F1    r    diskette controller status B (PS/2)π         bit 7-6  reservedπ         bit 5      drive select (0=A:, 1=B:)π         bit 4      write dataπ         bit 3      read dataπ         bit 2      write enableπ         bit 1      motor enable 1π         bit 0      motor enable 0ππ03F2    w    diskette controller DOR (Digital Output Register)π         bit 7-6    reserved PS/2π         bit 7 = 1  drive 3 motor enableπ         bit 6 = 1  drive 2 motor enableπ         bit 5 = 1  drive 1 motor enableπ         bit 4 = 1  drive 0 motor enableπ         bit 3 = 1  diskette DMA enable (reserved PS/2)π         bit 2 = 1  FDC enable    (controller reset)π               = 0  hold FDC at resetπ         bit 1-0    drive select (0=A 1=B ..)ππ03F4    r    diskette controller status registerπ         bit 7 = 1  data register is readyπ         bit 6 = 1  transfer is from controller to systemπ             0  transfer is from system to controllerπ         bit 5 = 1  non-DMA modeπ         bit 4 = 1  diskette controller busyπ         bit 3 = 1  drive 3 busy (reserved on PS/2)π         bit 2 = 1  drive 2 busy (reserved on PS/2)π         bit 1 = 1  drive 1 busyπ         bit 0 = 1  drive 0 busyππ03F5    r    diskette command status register 0π         bit 7-6      last command statusπ             = 00  command terminated successfullyπ             = 01  command terminated abnormallyπ             = 10  invalid commandπ             = 11  terminated abnormally by change in ready signalπ         bit 5     = 1   seek completedπ         bit 4     = 1  equipment check occurred after errorπ         bit 3     = 1  not readyπ         bit 2     = 1  head number at interruptπ         bit 1-0 = 1  unit select (0=A 1=B .. )π                  (on PS/2    01=A  10=B)ππ        status register 1π         bit 7        end of cylinder; sector# greater then sectors/trackπ         bit 6 = 0π         bit 5 = 1  CRC error in ID or data fieldπ         bit 4 = 1  overrunπ         bit 3 = 0π         bit 2 = 1  sector ID not foundπ         bit 1 = 1  write protect detected during writeπ         bit 0 = 1  ID address mark not foundππ        status register 2π         bit 7 = 0π         bit 6 = 1  deleted Data Eddress Mark detectedπ         bit 5 = 1  CRC error in dataπ         bit 4 = 1  wrong cylinder detectedπ         bit 3 = 1  scan command equal condition satisfiedπ         bit 2 = 1  scan command failed, sector not foundπ         bit 1 = 1  bad cylinder, ID not foundπ         bit 0 = 1  missing Data Address Mark ππ        status register 3π         bit 7        fault status signalπ         bit 6        write protect statusπ         bit 5        ready statusπ         bit 4        track zero statusπ         bit 3        two sided status signalπ         bit 2        side select (head select)π         bit 1-0    unit select (0=A 1=B .. )ππ03F6    r/w    FIXED disk controller data registerπ         bit 7-4    reservedπ         bit 3 = 0  reduce write currentπ             1  head select 3 enableπ         bit 2 = 1  disk reset enableπ             0  disk reset disableπ         bit 1 = 0  disk initialization enableπ             1  disk initialization disableπ         bit 0        reservedππ03F7    r    diskette controller DIR (Digital Input Register)π         bit 7 = 1 diskette changeππ         bit 6       FIXED DISK write gateπ         bit 5       FIXED DISK head select 3 / reduced write currentπ         bit 4       FIXED DISK head select 2π         bit 3       FIXED DISK head select 1π         bit 2       FIXED DISK head select 0π         bit 1       FIXED DISK drive 1 selectπ         bit 0       FIXED DISK drive 0 select   conflicts with:ππ         bit 0       diskette high density selectππ03F7    w    select register for diskette data transfer rateπ         bit 7-2       reservedπ         bit 1-0 = 00  500 Kb/S modeπ             = 01  300 Kb/S modeπ             = 10  250 Kb/S modeπ             = 11  reservedππ-------------------------------------------------------------------------------π03F8-03FF ----    serial port (8250,8251,16450,16550), same as 02E8,02F8,and 03F8ππ03F8    w    serial port, transmitter holding register, which contains theπ        character to be sent. Bit 0 is sent first.π         bit 7-0   data bits when DLAB=0 (Divisor Latch Access Bit)π    r    receiver buffer register, which contains the received characterπ        Bit 0 is received firstπ         bit 7-0   data bits when DLAB=0 (Divisor Latch Access Bit)π    r/w    divisor latch low byte when DLAB=1ππ03F9    r/w    divisor latch high byte when DLAB=1π    r/w    interrupt enable register when DLAB=0π         bits 7-4   reservedπ         bit 3 = 1  modem-status interrupt enableπ         bit 2 = 1  receiver-line-status interrupt enableπ         bit 1 = 1  transmitter-holding-register empty interrupt enableπ         bit 0 = 1  received-data-avail.int. enable (and 16550 timeout)ππ          - 16550 will interrupt if data exists in the FIFO and isn't readπ        within the time it takes to receive four bytes or if no data isπ        received within the time it takes to receive four bytesππ03FA    r    interrupt identification register. Information about a pendingπ        interrupt is stored here. When the ID register is addressed,π        the highest priority interrupt is held, and no other interruptsπ        are acknowledged until the CPU services that interrupt.π         bit 7-6 = 00  reserved on 8250, 8251, 16450π             = 11  if FIFO queues are enabled (16550 only)π         bit 5-4 = 0 reservedπ         bit 3     = 0 reserved  8250, 16450π             = 1 16550  timeout int. pendingπ         bit 2-1 identify pending interrupt with the highest priorityπ          = 11    receiver line status interrupt. priority=highestπ          = 10    received data available register interrupt. pr.=secondπ          = 01    transmitter holding register empty interrupt. pr.=thirdπ          = 00    modem status interrupt. priority=fourthπ         bit 0 = 0  interrupt pending. contents of register can be usedπ                as a pointer to the appropriate int.service routineπ             1  no interrupt pendingππ          - interrupt pending flag uses reverse logic, 0=pending, 1=noneπ          - interrupt will occur if any of the line status bits are setπ          - THRE bit is set when THRE register is emptied into the TSRπππ03FA    w    16650 FCR  (FIFO Control Register)π         bit 7-6 = 00  1 byteπ             = 01  4 bytesπ             = 10  8 bytesπ             = 11 14 bytesπ         bit 5-4 = 00 reservedπ         bit 3     = 1  change RXRDY  TXRDY pins from mode 0 to mode 1π         bit 2     = 1  clear XMIT FIFOπ         bit 1     = 1  clear RCVR FIFOπ         bit 0     = 1  enable clear XMIT and RCVR FIFO queuesππ          - bit 0 must be set in order to write to other FCR bitsπ          - bit 1 when set    the RCVR FIFO is cleared and this bit is resetπ         the receiver shift register is not clearedπ          - bit 2 when set    the XMIT FIFO is cleared and this bit is resetπ         the transmit shift register is not clearedππ03FB    r/w    line control registerπ         bit 7 = 1  divisor latch access bit (DLAB)π             0  receiver buffer, transmitter holding, or interruptπ                enable register accessπ         bit 6 = 1  set break enable. serial ouput is forced to spacingπ                state and remains there.π         bit 5 =    stick parityπ         bit 4 = 1  even parity selectπ         bit 3 =    parity enableπ             1  even number of ones are sent and checked in the π                data word bits and parity bitπ             0  odd number of ones are sent and checkedπ         bit 2 = 0  one stop bitπ             1  zero stop bitπ         bit 1-0 00 word length is 5 bitsπ             01 word length is 6 bitsπ             10 word length is 7 bitsπ             11 word length is 8 bitsππ03FC    r/w    modem control registerπ         bit 7-5 = 0  reservedπ         bit 4 = 1  loopback mode for diagnostic testing of serial portπ                output of transmitter shift register is looped backπ                to receiver shift register input. In this modeπ                transmitted data is received immediately so thatπ                the CPU can verify the transmit data/receive dataπ                serial port paths.π         bit 3 = 1  auxiliary user-designated output 2π         bit 2 = 1  auxiliary user-designated output 1π         bit 1 = 1  force request-to-send activeπ         bit 0 = 1  force data-terminal-ready activeππ03FD    r    line status registerπ         bit 7 = 0  reservedπ         bit 6 = 1  transmitter shift and holding registers emptyπ         bit 5 = 1  transmitter holding register empty. Controller isπ                ready toaccept a new character to send.π         bit 4 = 1  break interrupt. the received data input is held inπ                in the zero bit state longer than the time of startπ                bit + data bits + parity bit + stop bits.π         bit 3 = 1  framing error. the stop bit that follows the lastπ                parity or data bit is a zero bit.π         bit 2 = 1  parity error. Character has wrong parityπ         bit 1 = 1  overrun error. a character was sent to the receiverπ                buffer before the previous character in the bufferπ                could be read. This destroys the previousπ                character.π         bit 0 = 1  data ready. a complete incoming character has beenπ                received and sent to the receiver buffer register.ππ03FE    r    modem status registerπ         bit 7 = 1  data carrier detectπ         bit 6 = 1  ring indicatorπ         bit 5 = 1  data set readyπ         bit 4 = 1  clear to sendπ         bit 3 = 1  delta data carrier detectπ         bit 2 = 1  trailing edge ring indicatorπ         bit 1 = 1  delta data set readyπ         bit 0 = 1  delta clear to sendππ          - bits 0-3 are reset when the CPU reads the MSRπ          - bit 4 is the Modem Control Register RTS during loopback testπ          - bit 5 is the Modem Control Register DTR during loopback testπ          - bit 6 is the Modem Control Register OUT1 during loopback testπ          - bit 7 is the Modem Control Register OUT2 during loopback testππ03FF    r/w    scratch registerππ-------------------------------------------------------------------------------ππ        Adresses above 03FF apply to EISA machines only !ππ             1000-1FFF    slot 1 EISAπ             2000-2FFF    slot 2 EISAπ             3000-3FFF    slot 3 EISAπ             4000-4FFF    slot 4 EISAπ             5000-5FFF    slot 5 EISAπ             6000-6FFF    slot 6 EISAπ             7000-7FFF    slot 7 EISAππ-------------------------------------------------------------------------------π0401-04D6 ----    used by EISA systems onlyππ0401    r/w    DMA channel 0 word count byte 2 (high)π0403    r/w    DMA channel 1 word count byte 2 (high)π0405    r/w    DMA channel 2 word count byte 2 (high)π0407    r/w    DMA channel 3 word count byte 2 (high)ππ040A    w    extended DMA chaining mode register, channels 0-3π         bit 7-5      reservedπ         bit 4     = 0  generates IRQ13π             = 1  generates terminal countπ         bit 3     = 0  do not start chainingπ             = 1  programming completeπ         bit 2     = 0  disable buffer chaining mode (default)π             = 1  enable buffer chaining modeπ         bit 1-0      DMA channel selectππ040A    r    channel interrupt (IRQ13) status registerπ         bit 7-5  interrupt on channels 7-5π         bit 4      reservedπ         bit 3-0  interrupt on channels 3-0ππ040B    w    DMA extended mode register for channels 3-0.π        bit settings same as 04D6π         bit 7     = 0  enable stop registerπ         bit 6     = 0  terminal count is an output for this channelπ(default)π         bit 5-4      DMA cycle timingπ             = 00 ISA-compatible (default)π             = 01 type A timing modeπ             = 10 type B timing modeπ             = 11 burst DMA modeπ         bit 3-2      Address modeπ             = 00 8-bit I/O, count by bytes (default)π             = 01 16-bit I/O, count by words, address shiftedπ             = 10 32-bit I/O, count by bytesπ             = 11 16-bit I/O, count by bytesπ         bit 1-0      DMA channel selectππ-------------------------------------------------------------------------------π0461    r/w    Extended NMI status/control registerπ         bit 7 = 1  NMI pending from fail-safe timer (read only)π         bit 6 = 1  NMI pending from bus timeout NMI status (readπonly)π         bit 5 = 1  NMI pending (read only)π         bit 4        reservedπ         bit 3 = 1  bus timeout NMI enable (read/write)π         bit 2 = 1  fail-safe NMI enable (read/write)π         bit 1 = 1  NMI I/O port enable (read/write)π         bit 0        RSTDRV. bus reset (read/write)π               = 0  normal bus reset operationπ               = 1  reset bus assertedππ0462    w    Software NMI register. writing to this register causes an NMIπ        if NMI's are enabledπ         bit 7 = 1  generates an NMIππ0464    r    bus master status latch register (slots 1-8). identifies theπ        last bus master that had control of the busπ         bit 7 = 0  slot 8 had control lastπ         bit 6 = 0  slot 7 had control lastπ         bit 5 = 0  slot 6 had control lastπ         bit 4 = 0  slot 5 had control lastπ         bit 3 = 0  slot 4 had control lastπ         bit 2 = 0  slot 3 had control lastπ         bit 1 = 0  slot 2 had control lastπ         bit 0 = 0  slot 1 had control lastππ0465    r    bus master status latch register (slots 9-16)π         bit 7 = 0  slot 16 had control lastπ         bit 6 = 0  slot 15 had control lastπ         bit 5 = 0  slot 14 had control lastπ         bit 4 = 0  slot 13 had control lastπ         bit 3 = 0  slot 12 had control lastπ         bit 2 = 0  slot 11 had control lastπ         bit 1 = 0  slot 10 had control lastπ         bit 0 = 0  slot 9  had control lastππ-------------------------------------------------------------------------------π0481    r/w    DMA channel 2 address byte 3 (high)π0482    r/w    DMA channel 3 address byte 3 (high)π0483    r/w    DMA channel 1 address byte 3 (high)π0487    r/w    DMA channel 0 address byte 3 (high)π0489    r/w    DMA channel 6 address byte 3 (high)π048A    r/w    DMA channel 7 address byte 3 (high)π048B    r/w    DMA channel 5 address byte 3 (high)ππ04C6    r/w    DMA channel 5 word count byte 2 (high)π04CA    r/w    DMA channel 6 word count byte 2 (high)π04CE    r/w    DMA channel 7 word count byte 2 (high)ππ-------------------------------------------------------------------------------π04D0    w    IRQ 0-7 interrupt edge/level registersπ         bit 7 = 1  IRQ 7 is level sensitiveπ         bit 6 = 1  IRQ 6 is level sensitiveπ         bit 5 = 1  IRQ 5 is level sensitiveπ         bit 4 = 1  IRQ 4 is level sensitiveπ         bit 3 = 1  IRQ 3 is level sensitiveπ         bit 2-0    reservedππ04D1    w    IRQ 8-15 interrupt edge/level registersπ         bit 7 = 1  IRQ 15 is level sensitiveπ         bit 6 = 1  IRQ 14 is level sensitiveπ         bit 5 = 1  reservedπ         bit 4 = 1  IRQ 12 is level sensitiveπ         bit 3 = 1  IRQ 11 is level sensitiveπ         bit 2 = 1  IRQ 10 is level sensitiveπ         bit 1 = 1  IRQ 9  is level sensitiveπ         bit 0        reservedππ04D4    w    extended DMA chaining mode register, channels 4-7π         bit 7-5 = 0  reservedπ         bit 4     = 0  generates IRQ 13π             = 1  generates terminal countπ         bit 3     = 0  do not start chainingπ             = 1  programming completeπ         bit 2     = 0  disable buffer chaining mode (default)π             = 1  enable buffer chaining modeπ         bit 1-0      DMA channel selectππ04D6    w    DMA extended mode register for channels 4-7π        bit settings same as 04Bπ         bit 7     = 0  enable stop registerπ         bit 6     = 0  terminal count is an output for this channelπ(default)π         bit 5-4      DMA cycle timingπ             = 00 ISA-compatible (default)π             = 01 type A timing modeπ             = 10 type B timing modeπ             = 11 burst DMA modeπ         bit 3-2      Address modeπ             = 00 8-bit I/O, count by bytes (default)π             = 01 16-bit I/O, count by words, address shiftedπ             = 10 32-bit I/O, count by bytesπ             = 11 16-bit I/O, count by bytesπ         bit 1-0      DMA channel selectππ-------------------------------------------------------------------------------π0601    w    System control. Laptop chipset: Headland HL21 & Acer M5105π         bit 7 = 1  power led onπ         bit 6 = 1  LCD backlight offπ         bit 5π         bit 4π         bit 3π         bit 2 = 1  video chips disabled, screen blanked.π         bit 1π         bit 0 = 1  will lock up your machine!ππ    r     =04        (always reads back this value)ππ-------------------------------------------------------------------------------π0620-0627 ----    PC network (adapter 1)π0628-062F ----    PC network (adapter 2)ππ-------------------------------------------------------------------------------π06E2-06E3 ----    data aquisition (adapter 1)ππ-------------------------------------------------------------------------------π0790-0793 ----    cluster (adapter 1)ππ-------------------------------------------------------------------------------π0800-08FF ----    I/O port access registers for extended CMOS RAM or SRAMπ        (256 bytes at a time)π        Sometimes plain text can be seen here.ππ-------------------------------------------------------------------------------π0A20-0A23 ----    Token Ring (adapter 1)π0A24-0A27 ----    Token Ring (adapter 2)ππ-------------------------------------------------------------------------------π0AE2-0AE3 ----    cluster (adapter 2)π0B90-0B93 ----    cluster (adapter 2)ππ-------------------------------------------------------------------------------π0C00    r/w    page register to write to SRAM or I/Oππ-------------------------------------------------------------------------------π0C80-0C83 ----    system board ID registersππ-------------------------------------------------------------------------------π1390-1393 ----    cluster (adapter 3)ππ-------------------------------------------------------------------------------π2100-210F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2110-211F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2120-212F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2130-213F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2140-214F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2150-215F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2160-216F ----    IBM XGA (eXtended Graphics Adapter  8514/A)π2170-217F ----    IBM XGA (eXtended Graphics Adapter  8514/A)ππ-------------------------------------------------------------------------------π2390-2393 ----    cluster (adapter 4)ππ-------------------------------------------------------------------------------π3220-3227 ----    serial port 3, description same as 03F8π3228-322F ----    serial port 4, description same as 03F8ππ-------------------------------------------------------------------------------π3540-354F ----    IBM SCSI (Small Computer System Interface) adapterπ3550-355F ----    IBM SCSI (Small Computer System Interface) adapterπ3560-356F ----    IBM SCSI (Small Computer System Interface) adapterπ3570-357F ----    IBM SCSI (Small Computer System Interface) adapterππ-------------------------------------------------------------------------------π4220-4227 ----    serial port, description same as 03F8π4228-422F ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------π42E0-42EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππ42E1    r/w    GPIB (adapter 2)ππ-------------------------------------------------------------------------------π5220-5227 ----    serial port, description same as 03F8π5228-522F ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------π62E0-62EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππ62E1    r/w    GPIB (adapter 3)ππ-------------------------------------------------------------------------------π82E0-82EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππ82E1    r/w    GPIB (adapter 4)ππ-------------------------------------------------------------------------------π82F8-82FF ----    serial port, description same as 03F8π83F8-83FF ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------πA220      ????    soundblaster support in AMI Hi-Flex BIOS  ????ππ-------------------------------------------------------------------------------πA2E0-A2EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππA2E1    r/w    GPIB (adapter 5)ππ-------------------------------------------------------------------------------πAFFF    r/w    plane 0-3 system latch (video register)ππ-------------------------------------------------------------------------------πB220-B227 ----    serial port, description same as 03F8πB228-B22F ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------πC220-C227 ----    serial port, description same as 03F8πC228-C22F ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------πD220-D227 ----    serial port, description same as 03F8πD228-D22F ----    serial port, description same as 03F8ππ-------------------------------------------------------------------------------πC2E0-C2EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππC2E1    r/w    GPIB (adapter 6)ππ-------------------------------------------------------------------------------πE2E0-E2EF ----    GPIB (General Purpose Interface Bus, IEEE 488 interface)ππE2E1    r/w    GPIB (adapter 7)πππ-------------------------------------------------------------------------------ππMEMORY-MAPPED ADDRESSESππ-------------------------------------------------------------------------------π80C00000  Compaq Deskpro 386 system memory board registerππ80C00000 w    RAM relocation registerπ        bit 7-2       Reserved, always write 1's.π        bit 1 = 0  Write-protect 128-Kbyte RAM at FE0000.π              = 1  Do not write-protect RAM at FE0000.π        bit 0 = 0  Relocate 128-Kbyte block at FE0000 to address 0E0000π              = 1  128-Kbyte RAM is addressed only at FE0000.ππ80C00000 r    Diagnostics registerπ        bit 7    = 0  memory expansion board is installedπ        bit 6    = 0  second 1 MB of system memory board is installedπ        bit 5-4 = 00 base memory set to 640 KBπ              01 invalidπ              10 base memory set to 512 KBπ              11 base memory set to 256 KBπ        bit 3    = 0  parity error in byte 3π        bit 2    = 0  parity error in byte 2π        bit 1    = 0  parity error in byte 1π        bit 0    = 0  parity error in byte 0 (in 32-bit double word)ππ-------------------------------------------------------------------------------πEarl L. Montgomery             HEXADECIMAL AND BINARY NOTATIONQBTIPS_J.DOC                   03-27-93 (19:40)       Text                   109  3584     HEX-BIN.DOC While refreshing my memory on Hexadecimal and Binary notationsπ(and the use of the logical operators <AND> <OR>, I found thatπit helped to take notes. This is a compilation of those notes.πSome phrasing is entirely my own. So if you find any mistakesπ(other than grammar, sentence structure, or spelling! <smile>)πplease inform me so I can correct my document file. Thisπdocument should prove useful to the new programmers.π π                     A little info on Hexadecimal notation.π πHexadecimal is a numbering system based on 16 elements.πDigits are numbered 0 through F as follows:π π0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, Fπ πRepresenting the digits 0 through 15.π πHexadecimal system uses powers of 16. For example:π&H19 (hexadecimal) represents 25 decimal. Let's see why.πStarting from the right the power is 1. Therefore 9 X 1 = 9πMoving left the next is power is 16. Therefore 1 X 16 = 16πAnd 9 + 16 = 25.π πLet's try another. This time &HFF (hexadecimal)πAgain starting from the right (F=15) 15 X 1= 15πMoving left 15 X 16 = 240.πAnd 240 + 15 = 255π πSo far we have looked at single byte hex values. Let's look atπa 16 bit hex value. Remember 8 bits to the byte? Now we look atπtwo adjoining bytes, or sixteen bits.π π&H1902 (hexadecimal) represents 6402 decimal.π πAgain starting from the right 2 X 1= 2πMoving left 0 X 16 = 0πMoving left again <16 X 16 =256> 9 X 256 = 2304πMoving left again <16 X 256 = 4096> 1 X 4096 = 4096πAnd 2 + 0 + 2304 + 4096 = 6402π πIn basic hex values are preceeded by &H. For example &HFF or &H1902πIn basic hex values can be determined by the command PRINT &HFFπor PRINT &H1902.π πDecimal to hex is accomplished by PRINT HEX$(255)πor PRINT HEX$(1902).π πNow let's look at the individual bits within a byte.π πRemember there are 8 bits to the byte and reading from Rightπto Left they increase in power by the power of 2.π πBinary notation reflects set bits with a 1. Non set bits with a 0.πLet's look at one.π π1 0 0 0 1 0 0 1 (This byte represents 137)πAs with hex we start at the right.π π1 X 1= 1πMoving left 2 X 0 = 0πMoving left again 4 X 0 = 0πMoving left again 8 X 1 = 8πMoving left again 16 X 0 = 0πMoving left again 32 X 0 = 0πMoving left again 64 X 0 = 0πMoving left again 128 X 1 = 128π πAnd 1 + 0 + 0 + 8 + 0 + 0 + 0 + 128 = 137π π                     Logical Operators <AND> <OR>π πWhen you AND two numbers the results are in a new third number.πFor example:πa = 137πb = 105πc = a AND bπ π1 0 0 0 1 0 0 1  This represents A <137>π0 1 1 0 1 0 0 1  This represents B <105>π π0 0 0 0 1 0 0 1  This represents C <9>π πWhat occurs when you AND two numbers is that the computer comparesπthe bits within the first number against the bits in the second number.πIf the bits are the same then they will remain the same in the thirdπnumber.πIf they are not the same then the equivalent bits will be 0 in theπthird number.π π π                               "Logical ORπ πWhat occurs when you OR two numbers is that the computer comparesπthe bits within the first number against the bits in the second number.πIf the bits are the same they will remain the same in the third number.πIf they are not the same then the bits will be 1 in the third number.π πFor example:πA=122πB=15πC=A OR Bπ π0 1 1 1 1 0 1 0   This represents A <122>π0 0 0 0 1 1 1 1   This represents B <15>π π0 1 1 1 1 1 1 1   This represents C <127>π πThis quick little reference document composed by Earl MontgomeryπI hope it proves to be of some use to you.πNicolas Culberson              CHRISTMAS HAK-MAN              culberson@mis.nb.ca            03-02-96 (00:00)       QB, QBasic, PDS        1051 31504    HAK-MAN.BAS '              **   Writen by Nicolas Culberson of Apoky!   **π'The whole HaK-MaN hasn't come out yet.. but I'm hopeing to get it out soon.π'The controls are easy.. right arrow, left, up arrow and space to shoot..π'if you would like to email me, reach me at:    culberson@mis.nb.caπDECLARE SUB info ()πDECLARE SUB lev1 ()πDECLARE SUB die2 ()πDECLARE SUB menu ()πDECLARE SUB block ()πDECLARE SUB evilsanta ()πDECLARE SUB badman2 ()πDECLARE SUB badman ()πDECLARE SUB lev7 ()πDECLARE SUB blast ()πDECLARE SUB hitwallblast ()πDECLARE SUB takeoff ()πDECLARE SUB picture ()πDECLARE SUB secret ()πDECLARE SUB lev6 ()πDECLARE SUB lev5 ()πDECLARE SUB fallforward ()πDECLARE SUB lev4 ()πDECLARE SUB jumpfar ()πDECLARE SUB lev3 ()πDECLARE SUB fallpit ()πDECLARE SUB fallback ()πDECLARE SUB lev2 ()πDECLARE SUB hitwall ()πDECLARE SUB jumpright ()πDECLARE SUB hitself ()πDECLARE SUB die ()πDECLARE SUB forward ()πDECLARE SUB jump ()πDECLARE SUB backward ()πDECLARE SUB shoot ()πRANDOMIZE TIMERπDIM SHARED healπDIM SHARED bloodπDIM SHARED aπDIM SHARED bπDIM SHARED duhπDIM SHARED gunπDIM SHARED deathπDIM SHARED levπDIM SHARED bradπDIM SHARED bobπblood = 1πheal = 5πCLSπSCREEN 12π'CALL evilsanta      'unrem to go strait to the evil santa.πCALL menuπCALL lev2πCALL lev3πCALL lev4πCALL lev5πCALL lev6πCALL evilsantaπCALL lev7ππππππSUB backwardπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a - 5πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB badmanπCOLOR 10πPSET (a + 15, b + 6)πDRAW "r5u10l5d10"πPAINT (a + 16, b + 5), 2, 10πDOπIF da = 1000 THENπCOLOR 12πPAINT (a, b), 12, 15πIF blood = 1 THEN PSET (a, b - 10): DRAW "r3u2l1d3"πIF blood = 1 THEN PSET (a - 3, b - 10): DRAW "u3l2"πFOR cool = 1 TO 1000: NEXT coolπCOLOR 0πPAINT (a, b), 0, 15πIF blood = 1 THEN PSET (a, b - 10): DRAW "r3u2l1d3"πIF blood = 1 THEN PSET (a - 3, b - 10): DRAW "u3l2"πIF heal = 5 THEN CIRCLE (15, 115), 10, 0πIF heal = 4 THEN CIRCLE (15, 115), 8, 0πIF heal = 3 THEN CIRCLE (15, 115), 6, 0πIF heal = 2 THEN CIRCLE (15, 115), 4, 0πIF heal = 1 THEN CIRCLE (15, 115), 2, 0πIF heal = 0 THEN CALL dieπheal = heal - 1πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπda = 0πEND IFπda = da + 1πa$ = INKEY$πIF a$ = CHR$(27) THEN CALL menuπIF a$ = " " THENπIF blood = 0 THEN LINE (a + 10, b - 5)-(a + 20, b + 6), 0, BFπππjj = INT(RND * 2)ππIF blood = 1 AND jj = 0 THENπLINE (a + 10, b - 5)-(a + 20, b + 6), 12, BFπCOLOR 12πPSET (a + 10, b - 10): DRAW "r3u2l1d2"πPSET (a + 18, b - 10): DRAW "r4d2l1u5"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 20, b), 0, BFπCOLOR 0πPSET (a + 10, b - 10): DRAW "r3u2l1d2"πPSET (a + 18, b - 10): DRAW "r4d2l1u5"πCOLOR 12πPSET (a + 10, b + 7)πDRAW "d5r1u5r3d6r1u6r2d4u4r2d7r1u7"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 20, b + 6), 0, BFπPSET (a + 10, b + 7)πDRAW "d7r1u7r3d9r1u9r2d5u5r2d10r1u10"πEND IFππππIF blood = 1 AND jj = 1 THENπLINE (a + 10, b - 5)-(a + 20, b + 6), 12, BFπCOLOR 12πPSET (a + 10, b - 10): DRAW "r3u4l1u2"πPSET (a + 18, b - 10): DRAW "r4d2l3u4"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 20, b), 0, BFπCOLOR 0πPSET (a + 10, b - 10): DRAW "r3u4l1u2"πPSET (a + 18, b - 10): DRAW "r4d2l3u4"πCOLOR 12πPSET (a + 10, b + 7)πDRAW "d2r1u2r2d7r1u7r3d6r1u6r2d3r1u3"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 20, b + 6), 0, BFπPSET (a + 10, b + 7)πDRAW "d4r1u4r2d8r1u8r3d9r1u9r2d6r1u6"πEND IFππππk = 1πEND IFπLOOP UNTIL k = 1πdeath = death + 1πEND SUBπππππSUB badman2πCOLOR 15πPSET (a + 15, b + 6)πDRAW "r7u15l7d15"πPAINT (a + 16, b + 5), 15, 15πDOπIF da = 800 THENπCOLOR 12πPAINT (a, b), 12, 15πIF blood = 1 THEN PSET (a, b - 10): DRAW "r3u2l1d3"πIF blood = 1 THEN PSET (a - 3, b - 10): DRAW "u3l2"πIF lev < 6 THEN FOR cool = 1 TO 1000: NEXT coolπIF lev = 6 THEN FOR cool = 1 TO 500: NEXT coolπCOLOR 0πPAINT (a, b), 0, 15πIF blood = 1 THEN PSET (a, b - 10): DRAW "r3u2l1d3"πIF blood = 1 THEN PSET (a - 3, b - 10): DRAW "u3l2"πIF heal = 5 THEN CIRCLE (15, 115), 10, 0πIF heal = 4 THEN CIRCLE (15, 115), 8, 0πIF heal = 3 THEN CIRCLE (15, 115), 6, 0πIF heal = 2 THEN CIRCLE (15, 115), 4, 0πIF heal = 1 THEN CIRCLE (15, 115), 2, 0πIF heal = 0 THEN CALL dieπheal = heal - 1πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπda = 0πEND IFπda = da + 1πa$ = INKEY$πIF a$ = CHR$(27) THEN CALL menuπIF a$ = " " THENπIF blood = 0 THEN LINE (a + 10, b - 10)-(a + 23, b + 6), 0, BFπjjj = INT(RND * 2)ππIF blood = 1 AND jjj = 0 THENπLINE (a + 10, b - 10)-(a + 23, b + 6), 12, BFπCOLOR 12πPSET (a + 10, b - 10): DRAW "r3u2l1d2"πPSET (a + 18, b - 10): DRAW "r4d2l1u5"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 10)-(a + 23, b), 0, BFπCOLOR 0πPSET (a + 10, b - 10): DRAW "r3u2l1d2"πPSET (a + 18, b - 10): DRAW "r4d2l1u5"πCOLOR 12πPSET (a + 10, b + 7)πDRAW "d6r1u6d1r1u1r3d6r1u6r2d8r1u8r3d10r1u10r1d5r1u5"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 23, b + 6), 0, BFπPSET (a + 10, b + 7)πDRAW "d12r1u12d1r1u1r3d8r1u8r2d13r1u13r3d15r1u15r1d8r1u8"πEND IFπIF blood = 1 AND jjj = 1 THENπLINE (a + 10, b - 10)-(a + 23, b + 6), 12, BFπCOLOR 12πPSET (a + 12, b - 10): DRAW "l3u2r1d2"πPSET (a + 18, b - 10): DRAW "r4d4l2u3"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 10)-(a + 23, b), 0, BFπCOLOR 0πPSET (a + 12, b - 10): DRAW "l3u2r1d2"πPSET (a + 18, b - 10): DRAW "r4d4l2u3"πCOLOR 12πPSET (a + 10, b + 7)πDRAW "d4r1u4d6r1u6r3d3r1u3r2d4r1u4r3d15r1u15r1d8r1u8"πFOR cool = 1 TO 1000: NEXT coolπLINE (a + 10, b - 5)-(a + 23, b + 6), 0, BFπPSET (a + 10, b + 7)πDRAW "d6r1u6d8r1u8r3d5r1u5r2d8r1u8r3d16r1u16r1d11r1u11"πEND IFππk = 1πEND IFπLOOP UNTIL k = 1πdeath = death + 1πIF blood = 0 AND lev = 2 OR blood = 0 AND lev = 6 THEN FOR cool = 1 TO 1000: NEXT coolπEND SUBππSUB blockπhmm = b - 50ππDOπCOLOR 12πPSET (a - 5, hmm)πDRAW "r10u10l10d10"πPAINT (a + 1, hmm - 1), 3, 12πFOR cool = 1 TO 500: NEXT coolπPAINT (a + 1, hmm - 1), 0, 12πPSET (a - 5, hmm), 0πDRAW "r10u10l10d10"πhmm = hmm + 10πIF hmm = b THEN CALL dieπa$ = INKEY$πIF a = 130 AND a$ = " " THENπPAINT (151, 81), 12, 14πFOR cool = 1 TO 1000: NEXT coolπPAINT (151, 81), 13, 14πIF brad = 4 THENπIF blood = 1 THENπCOLOR 12πLINE (a + 10, b - 80)-(a + 50, b + 5), 12, BFπFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 70), 0, BFπPSET (a + 10, b + 6)πDRAW "d10r1u10r1d2r1u2r3d15r1u15r2d9r1u9r1d8r1u8r5d14r1u14r1d15r1u15r6d16r1u16r5d5r1u5r2d18r1u18r1d12r1u12r1d4r1u4"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 60), 0, BFπPSET (a + 10, b + 6)πDRAW "d14r1u14r1d3r1u3r3d17r1u17r2d13r1u13r1d11r1u11r5d16r1u16r1d19r1u19r6d21r1u21r5d8r1u8r2d18r1u18r1d16r1u16r1d8r1u8"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 50), 0, BFπPSET (a + 10, b + 6)πDRAW "d17r1u17r1d9r1u9r3d23r1u23r2d19r1u19r1d14r1u14r5d20r1u20r1d26r1u26r6d25r1u25r5d13r1u13r2d27r1u27r1d19r1u19r1d12r1u12"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 40), 0, BFπPSET (a + 10, b + 6)πDRAW "d23r1u23r1d13r1u13r3d28r1u28r2d29r1u29r1d19r1u19r5d26r1u26r1d28r1u28r6d30r1u30r5d19r1u19r2d33r1u33r1d24r1u24r1d17r1u17"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 30), 0, BFπPSET (a + 10, b + 6)πDRAW "d29r1u29r1d17r1u17r3d35r1u35r2d37r1u37r1d25r1u25r5d29r1u29r1d36r1u36r6d36r1u36r5d24r1u24r2d39r1u39r1d27r1u27r1d21r1u21"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 20), 0, BFπPSET (a + 10, b + 6)πDRAW "d34r1u34r1d26r1u26r3d39r1u39r2d42r1u42r1d28r1u28r5d35r1u35r1d40r1u40r6d39r1u39r5d29r1u29r2d47r1u47r1d33r1u33r1d25r1u25"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b - 10), 0, BFπPSET (a + 10, b + 6)πDRAW "d39r1u39r1d35r1u35r3d47r1u47r2d46r1u46r1d35r1u35r5d38r1u38r1d44r1u44r6d45r1u45r5d36r1u36r2d47r1u47r1d38r1u38r1d29r1u29"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b), 0, BFπPSET (a + 10, b + 6)πDRAW "d47r1u47r1d36r1u36r3d50r1u50r2d51r1u51r1d38r1u38r5d43r1u43r1d47r1u47r6d48r1u48r5d44r1u44r2d49r1u49r1d45r1u45r1d35r1u35"πFOR cool = 1 TO 500: NEXT coolπLINE (a + 10, b - 80)-(a + 50, b + 5), 0, BFπPSET (a + 10, b + 6)πDRAW "d53r1u52r1d39r1u39r3d55r1u55r2d57r1u57r1d43r1u43r5d48r1u48r1d53r1u53r6d55r1u55r5d49r1u49r2d54r1u54r1d48r1u48r1d39r1u39"πFOR cool = 1 TO 500: NEXT coolπEND IFπCALL lev7πEND IFπbrad = brad + 1πEND IFπIF a = 125 AND a$ = CHR$(0) + "M" THEN a$ = "Yo"πIF a = 130 AND a$ = CHR$(0) + "M" THEN a$ = "Yo"πLOOP UNTIL a$ = CHR$(0) + "M" OR a$ = CHR$(0) + "K"πIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = CHR$(0) + "K" THEN CALL backward: a = a + 10πIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "M" THEN CALL forward: a = a - 10πDOπCOLOR 12πPSET (a - 5, hmm)πDRAW "r10u10l10d10"πPAINT (a + 1, hmm - 1), 3, 12πFOR cool = 1 TO 500: NEXT coolπPAINT (a + 1, hmm - 1), 0, 12πPSET (a - 5, hmm), 0πDRAW "r10u10l10d10"πhmm = hmm + 10πLOOP UNTIL hmm = bπCOLOR 12πPSET (a - 5, b + 7)πDRAW "d10r2u7r2d12r2u12r2d6r2u6r2d8r2u11l14"πPAINT (a - 3, b + 8), 3, 12πPAINT (a, b + 8), 3, 12πIF a$ = CHR$(0) + "K" THEN a = a - 10πIF a$ = CHR$(0) + "M" THEN a = a + 10πa$ = "Yo"πdeath = death + 1πEND SUBππSUB dieπIF blood = 0 THEN LINE (a - 10, b - 10)-(a + 10, b + 5), 0, BFπIF blood = 1 THENπLINE (a - 10, b - 10)-(a + 10, b + 5), 12, BFπFOR cool = 1 TO 500: NEXT coolπLINE (a - 10, b - 10)-(a + 10, b - 5), 0, BFπPSET (a - 10, b + 6), 12πDRAW "d10r1u10r2d12r1u12r3d9r1u9r5d13r1u13r2d8r1u8r3d12r1u12"πFOR cool = 1 TO 500: NEXT coolπLINE (a - 10, b - 10)-(a + 10, b), 0, BFπPSET (a - 10, b + 6), 12πDRAW "d13r1u13r2d17r1u17r3d11r1u11r5d15r1u15r2d10r1u10r3d13r1u13"πFOR cool = 1 TO 500: NEXT coolπLINE (a - 10, b - 10)-(a + 10, b + 4), 0, BFπPSET (a - 10, b + 6), 12πDRAW "d16r1u16r1d3u3l1r2d19r1u19r3d13r1u13r5d17r1u17r2d13r1u13r3d16r1u16"πFOR cool = 1 TO 1000: NEXT coolπEND IFπCOLOR 12πPALETTE 15, 0πFOR x = 1 TO 63 STEP 1πPALETTE 15, x '* 256πPALETTE 0, 63 - xπLOCATE 15, 35: PRINT "Game Over"πNEXT xπPALETTEπCALL menuπEND SUBππππππSUB die2πCOLOR 12πPALETTE 15, 0πFOR x = 1 TO 63 STEP 1πPALETTE 15, x '* 256πPALETTE 0, 63 - xπLOCATE 15, 35: PRINT "Game Over"πNEXT xπPALETTEπCALL menuπENDπEND SUBππSUB evilsantaπendsanta = 1πCLSπCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 90)πDRAW "r199"πPAINT (1, 91), 4, 2πCOLOR 14πPSET (150, 30)πDRAW "r30d58l40u10r10r30l30u5h5u5e5 u2r30l30u8  r10e5g5l10l5u5r5u12"πPAINT (151, 31), 8, 14πPSET (160, 60)πDRAW "r10d10l10u10d15r3u2d2r3u2d2r3u2d2u4"πPSET (155, 35)πDRAW "r5d5l5u5"πPAINT (156, 36), 12, 14πPAINT (151, 81), 13, 14πCOLOR 15πPSET (150, 29)πDRAW "r30u5l30d5"πPAINT (153, 25), 15, 15πCOLOR 12πPSET (155, 23)πDRAW "e10f10l20"πPAINT (157, 22), 12, 12πCOLOR 15πPSET (163, 13)πDRAW "r5u5l5d5"πPAINT (164, 12), 15, 15πa = 10πb = 84πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a$ = CHR$(27) THEN CALL menuπIF a = 130 AND a$ = " " THEN a$ = "Yo"πIF a = 130 AND a$ = CHR$(0) + "M" THEN a$ = "Yo"πIF a = 60 THENπCOLOR 2πPSET (a - 6, b + 5)πDRAW "u100"πEND IFπIF a = 60 AND a$ = CHR$(0) + "K" THEN a$ = "Yo"πIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "Yo"πIF a$ = " " THEN CALL shootπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a > 70 AND a < 135 THEN CALL blockπIF x = 199 THEN x = 1πNEXT xπENDπEND SUBππSUB fallbackπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a - 10πb = b + 10πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB fallforwardπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a + 10πb = b + 10πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB fallpitπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b + 10), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπCIRCLE (a + 7, b + 10), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b + 20), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπCIRCLE (a + 7, b + 20), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b + 30), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπCIRCLE (a + 7, b + 30), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b + 40), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπCIRCLE (a + 7, b + 40), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b + 50), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπIF duh = 1 THEN CALL lev6π'IF duh = 2 THEN CALL secretπIF duh = 3 THEN CIRCLE (a + 7, b + 50), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f: GOTO 1"πCALL die2π1πEND SUBππππππππSUB forwardπCOLOR 0πCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a + 5πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB hitselfπPAINT (a, b), 12, 15πCOLOR 12πIF blood = 1 THEN PSET (a - 5, b - 12): DRAW "u4l3d1r3d1l3"πFOR cool = 1 TO 1000: NEXT coolπPAINT (a, b), 0, 15πCOLOR 0πIF blood = 1 THEN PSET (a - 5, b - 12): DRAW "u4l3d1r3d1l3"πIF blood = 1 THEN COLOR 12: PSET (a - 10, b + 7): DRAW "d3r1u3r2d2r1u2"πIF heal = 5 THEN CIRCLE (15, 115), 10, 0πIF heal = 4 THEN CIRCLE (15, 115), 8, 0πIF heal = 3 THEN CIRCLE (15, 115), 6, 0πIF heal = 2 THEN CIRCLE (15, 115), 4, 0πIF heal = 1 THEN CIRCLE (15, 115), 2, 0πIF heal = 0 THEN CALL dieπheal = heal - 1πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπEND SUBππSUB hitwallπCOLOR 10πPSET (a + 10, b - 3)πDRAW "h1f1d5g1l1e1u5h1"πFOR cool = 1 TO 1000: NEXT coolπCOLOR 0πPSET (a + 10, b - 3)πDRAW "h1f1d5g1l1e1u5h1"πEND SUBππSUB infoπCLSπSCREEN 0πCOLOR 15πPRINTπCOLOR 30πPRINT "                           ***CHRISTMAS HaK-MaN***"πCOLOR 15πPRINTπPRINT "The Controls..."πPRINTπPRINT "Up arrow /\ is Jump"πPRINT "Left arrow < is walk backwards"πPRINT "Right arrow > is walk forwards"πPRINT "Space bar --- is shoot"πPRINTπPRINT "If you want to jump up and go right you must be at a wall... "πPRINTπPRINT "Menu..."πPRINTπPRINT "The menu is very easy, just press the button in [] you wish to use. "πPRINT "Blood.."πPRINT "If you do not want blood press B at the main menu and that will turn"πPRINT "it off. If you want it back on just press B again. "πPRINT "      Every time you go back to the menu the blood will turn on."πPRINT "Press a key..."πSLEEPπPRINTπPRINT "In the game..."πPRINTπPRINT "If you want the time in the middle of the game you can just press T"πPRINT "If you want to quit in the middle of a game press ESC"πPRINTπPRINT "The last boss..."πPRINTπPRINT "The last boss is very hard but you must get past him. Why?, I donno."πPRINT "You must shoot the evilsantas feet to kill him.  What will happen is"πPRINT "there will be blocks falling after two moves past the wall that pops"πPRINT "up.  You must move in and hit him then get out of the way as fast as"πPRINT "posible. "πPRINTπPRINT "If you can't beat the evilsanta or can't get past the levels here is"πPRINT "what it says: "πPRINTπPRINT "You have won CHRISTMAS VERSION"πPRINT "of HaK-MaN.If you enjoyed this"πPRINT "please DL the whole HaK-MaN.  If you"πPRINT "didn't enjoy this, DL the whole HaK-MaN"πPRINT "Press a key..."πSLEEPπPRINT "because it is alot better. The full"πPRINT "version includes:"πPRINTπPRINT "1) More levels (but harder)"πPRINT "2) More badguys(but harder)"πPRINT "3) PC sounds"πPRINT "4) Lots of cool pictures"πPRINT "5) More Guns!!!!!!!"πPRINT "6) 4 x the screen size (400x200)"πCOLOR 31: PRINT "AND MUCH MORE! "πCOLOR 15πPRINTπPRINT "Press Enter..."πDOπIF INKEY$ = CHR$(13) THEN SCREEN 12: CALL menuπLOOPπππENDπCALL menuπEND SUBππSUB jumpπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a, b - 10), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 1000: NEXT coolπCIRCLE (a, b - 10), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB jumpfarπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 7, b - 10), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 1000: NEXT coolπCIRCLE (a + 7, b - 10), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a + 15πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB jumprightπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 5, b - 15), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 1000: NEXT coolπCIRCLE (a + 5, b - 15), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πa = a + 10πb = b - 10πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πEND SUBππSUB lev1πheal = 5πlev = lev + 1πCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 90)πDRAW "r50u10r30d20r20u20r60u10r38"πPAINT (3, 93), 9, 2πPAINT (133, 93), 9, 2πCOLOR 14πPSET (62, 50)πDRAW "r5u5l5d5"πPAINT (63, 49), 6, 14πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 10πb = 83πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a = 195 THEN CALL lev2πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 15 AND death = 0 OR a = 55 AND death = 1 OR a = 95 AND death = 2 OR a = 135 AND death = 3 OR a = 175 AND death = 4 THEN CALL badmanπIF a = 195 THEN x = 200πIF a = 80 AND a$ = CHR$(0) + "M" AND bridge = 0 THENπCIRCLE (a, b), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 10, b + 10), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR cool = 1 TO 500: NEXT coolπCIRCLE (a + 10, b + 10), 5, 0: DRAW "c0u4u1r5u1l10d1r5u1l4u1e4f4l7e3f3l5e2f1l1"πCIRCLE (a + 10, b + 20), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πCALL die2πEND IFπIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 45 AND a$ = CHR$(0) + "M" OR a = 155 AND a$ = CHR$(0) + "M" THEN a$ = "b"πIF a = 45 AND a$ = CHR$(0) + "H" OR a = 155 AND a$ = CHR$(0) + "H" THEN CALL jumpright: a$ = "b"πIF a = 45 AND a$ = " " OR a = 155 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 40 AND a$ = " " OR a = 150 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a = 55 AND a$ = CHR$(0) + "K" OR a = 165 AND a$ = CHR$(0) + "K" THEN CALL fallback: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF a = 65 AND a$ = CHR$(0) + "H" AND bridge = 0 THENπCOLOR 15πPSET (a + 16, b + 7)πDRAW "r20"πbridge = 1πPAINT (63, 49), 12, 14πa$ = "b"πEND IFπIF a = 65 AND a$ = CHR$(0) + "H" AND bridge = 1 THENπCOLOR 0πPSET (a + 17, b + 7)πDRAW "r18 "πbridge = 0πPAINT (63, 49), 6, 14πEND IFπIF x = 199 THEN x = 1πNEXT xπEND SUBππSUB lev2πlev = lev + 1πCLSπCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 70)πDRAW "r50u10r50u10r30d50r12u50r28d50r12u50r16"πPAINT (3, 93), 9, 2πPAINT (153, 93), 9, 2πPAINT (196, 93), 9, 2πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 10πb = 63πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a = 195 THEN CALL lev3πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 15 AND death = 5 OR a = 55 AND death = 6 OR a = 105 AND death = 7 OR a = 145 AND death = 8 THEN CALL badmanπIF a = 195 THEN x = 200πIF a = 145 AND a$ = CHR$(0) + "K" OR a = 185 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 130 AND a$ = CHR$(0) + "H" OR a = 170 AND a$ = CHR$(0) + "H" THEN CALL jumpfar: a$ = "b"πIF a = 130 AND a$ = CHR$(0) + "M" OR a = 170 AND a$ = CHR$(0) + "M" THEN CALL fallpit: a$ = "b"πIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 45 AND a$ = CHR$(0) + "M" OR a = 95 AND a$ = CHR$(0) + "M" THEN a$ = "b"πIF a = 45 AND a$ = CHR$(0) + "H" OR a = 95 AND a$ = CHR$(0) + "H" THEN CALL jumpright: a$ = "b"πIF a = 45 AND a$ = " " OR a = 95 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 40 AND a$ = " " OR a = 90 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a = 55 AND a$ = CHR$(0) + "K" OR a = 105 AND a$ = CHR$(0) + "K" THEN CALL fallback: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF x = 199 THEN x = 1πNEXT xπEND SUBππSUB lev3πlev = lev + 1πCLSπCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 50)πDRAW "r30d50r12u50r28u10r50d10r50u20r29d20l29r5u15l5"πPAINT (3, 93), 9, 2πPAINT (93, 93), 9, 2πPAINT (198, 45), 1, 2πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 10πb = 43πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a = 170 THEN CALL lev4πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 45 AND death = 9 THEN CALL badman2πIF a = 95 AND death = 10 THEN CALL badmanπIF a = 135 AND death = 11 THEN CALL badman2πIF a = 170 THEN x = 200πIF a = 130 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 120 AND a$ = CHR$(0) + "M" THEN CALL fallforward: a$ = "b"πIF a = 30 AND a$ = CHR$(0) + "H" THEN CALL jumpfar: a$ = "b"πIF a = 30 AND a$ = CHR$(0) + "M" THEN CALL fallpit: a$ = "b"πIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 45 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 65 AND a$ = CHR$(0) + "M" THEN a$ = "b"πIF a = 65 AND a$ = CHR$(0) + "H" THEN CALL jumpright: a$ = "b"πIF a = 65 AND a$ = " " OR a = 165 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 60 AND a$ = " " OR a = 160 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a = 75 AND a$ = CHR$(0) + "K" THEN CALL fallback: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF x = 199 THEN x = 1πNEXT xπEND SUBπππππππSUB lev4πlev = lev + 1πCLSπdeath = 0πCOLOR 7πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 90)πDRAW "r30u10r50u10r30d10r40d10r48"πPAINT (3, 93), 8, 7πCOLOR 14πPSET (10, 1)πDRAW "d20g5r10h5"πIF duh = 2 THENπduh = 3πa = 10πb = 33πCALL fallpitπduh = 0πEND IFπIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 10πb = 83πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 45 AND death = 0 THEN CALL badman2πIF a = 85 AND death = 1 THEN CALL badman2πIF a = 125 AND death = 2 THEN CALL badman2πIF a = 165 AND death = 3 THEN CALL badmanπIF a = 195 THEN CALL lev5πIF a = 110 AND a$ = CHR$(0) + "M" OR a = 150 AND a$ = CHR$(0) + "M" THEN CALL fallforward: a$ = "b"πIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 120 AND a$ = CHR$(0) + "K" OR a = 160 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 25 AND a$ = CHR$(0) + "M" OR a = 75 AND a$ = CHR$(0) + "M" THEN a$ = "b"πIF a = 25 AND a$ = CHR$(0) + "H" OR a = 75 AND a$ = CHR$(0) + "H" THEN CALL jumpright: a$ = "b"πIF a = 75 AND a$ = " " OR a = 25 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 70 AND a$ = " " OR a = 20 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a = 85 AND a$ = CHR$(0) + "K" OR a = 35 AND a$ = CHR$(0) + "K" THEN CALL fallback: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF x = 199 THEN x = 1πNEXT xπENDπEND SUBππSUB lev5πlev = 2πdeath = 0πCLSπCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (1, 50)πDRAW "r40d50r12u50r28d50r12u50r28d50r12u50r28u10r20d60"πCOLOR 12πPSET (192, 10)πDRAW "r3d5r3g5h5r3u5"πPAINT (194, 12), 4, 12πPAINT (3, 93), 9, 2πPAINT (63, 93), 9, 2πPAINT (113, 93), 9, 2πPAINT (173, 93), 9, 2πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 10πb = 43πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 15 AND death = 0 THEN CALL badman2πIF a = 15 AND death = 1 THEN CALL badman2πIF a = 55 AND death = 2 THEN CALL badman2πIF a = 55 AND death = 3 THEN CALL badman2πIF a = 140 AND death = 4 THEN CALL badmanπIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 120 AND a$ = CHR$(0) + "M" THEN duh = 2πIF a = 180 AND a$ = CHR$(0) + "M" THEN duh = 1πIF a = 40 AND a$ = CHR$(0) + "H" OR a = 80 AND a$ = CHR$(0) + "H" OR a = 120 AND a$ = CHR$(0) + "H" THEN CALL jumpfar: a$ = "b"πIF a = 40 AND a$ = CHR$(0) + "M" OR a = 80 AND a$ = CHR$(0) + "M" OR a = 120 AND a$ = CHR$(0) + "M" OR a = 180 AND a$ = CHR$(0) + "M" THEN CALL fallpit: a$ = "b"πIF a = 10 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 155 AND a$ = CHR$(0) + "M" THEN a$ = "b"πIF a = 55 AND a$ = CHR$(0) + "K" OR a = 95 AND a$ = CHR$(0) + "K" OR a = 135 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 155 AND a$ = CHR$(0) + "H" THEN CALL jumpright: a$ = "b"πIF a = 165 AND a$ = CHR$(0) + "K" THEN CALL fallback: a$ = "b"πIF a = 155 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 150 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF x = 199 THEN x = 1πNEXT xπEND SUBππSUB lev6πdeath = 0πlev = 6πCLSπCOLOR 2πPSET (0, 0)πDRAW "r200d100l200u100"πPSET (50, 1)πDRAW "d89r101u90l30d60l50u60"πPAINT (3, 93), 9, 2πPAINT (85, 3), 9, 2πCOLOR 13πPSET (131, 89)πDRAW "r19u30l19d30"πPAINT (132, 87), 2, 13πIF heal = 5 THEN CIRCLE (15, 115), 10, 4πIF heal = 4 THEN CIRCLE (15, 115), 8, 4πIF heal = 3 THEN CIRCLE (15, 115), 6, 4πIF heal = 2 THEN CIRCLE (15, 115), 4, 12πIF heal = 1 THEN CIRCLE (15, 115), 2, 12πIF heal = 0 THEN CALL dieπa = 60πb = 83πCIRCLE (a, b), 5, 15: DRAW "c0u4c15u1c15r5u1l10d1r5u1l4u1c12e4f4l7e3f3l5e2f1l1"πFOR x = 1 TO 200πa$ = INKEY$πIF a$ = "T" OR a$ = "t" THEN COLOR 1: LOCATE 16, 1: PRINT TIME$: LOCATE 16, 1: SLEEP: PRINT "                   "πIF a = 70 AND death = 0 THEN CALL badman2πIF a = 70 AND death = 1 THEN CALL badman2πIF a = 70 AND death = 2 THEN CALL badman2πIF a = 75 AND death = 3 THEN CALL badman2πIF a = 75 AND death = 4 THEN CALL badman2πIF a = 75 AND death = 5 THEN CALL badman2πIF a = 90 AND death = 6 THEN CALL badman2πIF a = 90 AND death = 7 THEN CALL badman2πIF a = 90 AND death = 8 THEN CALL badman2ππIF a = 190 AND a$ = " " THEN CALL hitwall: a$ = "Yo"πIF a = 125 THEN x = 200πIF a = 60 AND a$ = CHR$(0) + "K" THEN a$ = "b"πIF a = 125 AND a$ = " " THEN CALL hitself: a$ = "b"πIF a = 120 AND a$ = " " THEN CALL hitwall: a$ = "b"πIF a$ = CHR$(27) THEN CALL menuπIF a$ = CHR$(0) + "M" THEN CALL forwardπIF a$ = CHR$(0) + "H" THEN CALL jumpπIF a$ = CHR$(0) + "K" THEN CALL backwardπIF a$ = " " THEN CALL shootπIF x = 199 THEN x = 1πNEXT xπCALL evilsantaπEND SUBππSUB lev7πCOLOR 4πCLSπSCREEN 0πCOLOR 15πLOCATE 1, 1πPRINT "You have won the CHRISTMAS VERSION"πPRINT "of HaK-MaN.If you enjoyed this"πPRINT "please DL the whole HaK-MaN.  If you"πPRINT "didn't enjoy this, DL the whole HaK-MaN"πPRINT "because it is alot better. The full"πPRINT "version includes:"πPRINTπPRINT "1) More levels (but harder)"πPRINT "2) More badguys(but harder)"πPRINT "3) PC sounds"πPRINT "4) Lots of cool pictures"πPRINT "5) More Guns!!!!!!!"πPRINT "6) 4 x the screen size (400x200)"πCOLOR 31: PRINT "AND MUCH MORE! "πCOLOR 15: PRINTπPRINT "Press Enter..."πDOπIF INKEY$ = CHR$(13) THEN ENDπLOOPπSCREEN 12πENDπEND SUBππSUB menuπblood = 1πCLSπCOLOR 12πPSET (130, 100)πDRAW "r350d200l350u200"πPAINT (131, 103), 1, 12πCOLOR 10πLOCATE 10, 20πPRINT "[P]lay Christmas HaK-MaN"πLOCATE 12, 20πPRINT "[B]lood  Yes  No"πCOLOR 13πLOCATE 12, 28: PRINT "*"πLOCATE 14, 20πCOLOR 10πPRINT "[I]nfo on Christmas HaK-MaN"πLOCATE 16, 20πPRINT "[E]xit Christmas HaK-MaN"πCOLOR 8πPSET (140, 99)πDRAW "u10r350d200l9u190l340"πPAINT (145, 98), 8, 8πFOR x = 1 TO 200πa$ = INKEY$πIF a$ = "P" OR a$ = "p" THEN x = 200πIF a$ = "E" OR a$ = "e" THEN ENDπIF a$ = "I" OR a$ = "i" THEN CALL infoπIF a$ = "B" AND blood = 1 OR a$ = "b" AND blood = 1 THENπCOLOR 0πLOCATE 12, 28: PRINT "*"πCOLOR 13πLOCATE 12, 33πPRINT "*"πa$ = "Yo"πblood = 0πEND IFπIF blood = 0 AND a$ = "b" OR blood = 0 AND a$ = "B" THENπCOLOR 0πLOCATE 12, 33: PRINT "*"πCOLOR 13πLOCATE 12, 28πPRINT "*"πa$ = "Yo"πblood = 1πEND IFπIF x = 199 THEN x = 1πNEXT xπCLSπdeath = 0πCALL lev1πEND SUBπππππππSUB shootπCOLOR 10πPSET (a + 10, b - 3)πDRAW "r3d6l3r2u3l2r2u1"πFOR cool = 1 TO 1000πNEXT coolπCOLOR 0πPSET (a + 10, b - 3)πDRAW "r3d6l3r2u3l2r2u1"πEND SUBππTim Desper                     FIRE STORM                     pages.nyu.edu/~jqm1584/        03-06-96 (09:55)       QB, QBasic, PDS        808  21023    FIRE.BAS    '        |-----                 /-------    |π'        |                      |         --|--π'        |----  -  |___  ___    \------\    |  /--\ |___ |\  /|π'        |      |  |    /___\          |    |  |  | |    | \/ |π'        |      |  |    \___     ------/    |  \__/ |    |    |π'             π'π'π'π'    ===================================================================π'    ===================================================================π'                           By Tim Desper & Co.π'      π'      π'    ===================================================================π'    ===================================================================π'π'πSHELL "mode con: rate=32 delay=1"πSHELL "cls"πDIM paz(1 TO 1000)πDIM ded(1 TO 5000)π6 SCREEN 12: CLSπPSET (30, 40), (4): DRAW "r22l22d50u25r25"πPSET (70, 40), (4): DRAW "r25l12d50l12r25"πPSET (125, 40), (4): DRAW "r25d25l25u25d50u25f25"πPSET (180, 40), (4): DRAW "r25l25d25r12l12d25r25"πPSET (330, 40), (4): DRAW "r25l25d25r25d25l25"πPSET (390, 40), (4): DRAW "r25l12d50"πPSET (450, 40), (4): DRAW "r25d50l25u50"πPSET (510, 40), (4): DRAW "r25d25l25u25d50u25f25"πPSET (570, 40), (4): DRAW "d50u50f12e12d50"πLOCATE 12, 34: PRINT "VERSION 1.0"πLOCATE 14, 38: PRINT "by"πLOCATE 15, 32: PRINT "Tim Desper & Co."πLOCATE 20, 29: PRINT "Please Press Space Bar"πDOπSELECT CASE INKEY$πCASE CHR$(32): EXIT DOπEND SELECTπLOOPπ34 CLEARπSCREEN 12: CLSπPAINT (1, 1), 8πPSET (10, 60): DRAW "r55l55d100u50r50"πPSET (70, 60): DRAW "r50l25d100l25r50"πPSET (125, 60): DRAW "r50d50l50u50d100u50f50"πPSET (180, 60): DRAW "r50l50d50r25l25d50r50"πPSET (330, 60): DRAW "r50l50d50r50d50l50"πPSET (390, 60): DRAW "r50l25d100"πPSET (450, 60): DRAW "r50d100l50u100"πPSET (510, 60): DRAW "r50d50l50u50d100u50f50"πPSET (570, 60): DRAW "d100u100f25e25d100"πLOCATE 17, 40: PRINT "START"πLOCATE 20, 40: PRINT "INSTRUCTIONS"πLOCATE 23, 40: PRINT "REGISTRATION"πa = 180: b = 262πCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πDOπSELECT CASE INKEY$πCASE CHR$(0) + "M" 'rightπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 262: b = 310πCASE 310: b = 359πCASE 359: b = 262πEND SELECTπCASE CHR$(0) + "P" 'downπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 262: b = 310πCASE 310: b = 359πCASE 359: b = 262πEND SELECTπCASE CHR$(0) + "K" 'leftπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 262: b = 359πCASE 310: b = 262πCASE 359: b = 310πEND SELECTπCASE CHR$(0) + "H" 'upπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 262: b = 359πCASE 310: b = 262πCASE 359: b = 310πEND SELECTπCASE CHR$(32)πSELECT CASE bπCASE 262: GOTO 17πCASE 310πCLSπLOCATE 7, 15: PRINT "In Firestorm you are the oval shaped ship. You"πLOCATE 8, 15: PRINT "move up, down, left, and right by using the"πLOCATE 9, 15: PRINT "arrow keys. You shoot by pressing the space bar."πLOCATE 10, 15: PRINT "To pause the game press the p button. You can end the"πLOCATE 11, 15: PRINT "game at any point by pressing the e button. In level 1"πLOCATE 12, 15: PRINT "if you or the circles touch the border then you"πLOCATE 13, 15: PRINT "(or the circles) are transported to another place"πLOCATE 14, 15: PRINT "on the screen. You will not be able to shoot the"πLOCATE 15, 15: PRINT "level 1 boss until you shoot all of the small circles."πLOCATE 16, 15: PRINT "Sometimes you will run across invisible small circles."πLOCATE 17, 15: PRINT "Those are the hardest to shoot but are worth the most points."πLOCATE 18, 15: PRINT "If you have any problems when using Spacewar"πLOCATE 19, 15: PRINT "then E-mail me at Kilrathi3@aol.com and let me know."πLOCATE 22, 26: PRINT "press spacebar to continue"πDOπSELECT CASE INKEY$πCASE "e": GOTO 33πCASE "E": GOTO 33πCASE CHR$(32): GOTO 34πEND SELECTπLOOPπCASE 359πCLSπLOCATE 9, 17: PRINT "The full version of Firestorm isn't finished yet."πLOCATE 10, 17: PRINT "Firestorm version 2.0 will have registration info"πLOCATE 11, 17: PRINT "and will run a lot better than Firestorm version 1.0."πLOCATE 12, 17: PRINT "Look for it sometime early '96."πLOCATE 13, 17: PRINT "If you are interested in registering Firestorm"πLOCATE 14, 17: PRINT "let me know. E-mail me at Kilrathi3@aol.com and"πLOCATE 15, 17: PRINT "tell me what you think of Firestorm, along with "πLOCATE 16, 17: PRINT "any suggestions and ideas you have for it."πLOCATE 20, 26: PRINT "press spacebar to continue"πDOπSELECT CASE INKEY$πCASE "e": GOTO 33πCASE "E": GOTO 33πCASE CHR$(32): GOTO 34πEND SELECTπLOOPπEND SELECTπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πLOOPπ17 SCREEN 12: CLSπqqqq = 0πLOCATE 14, 35: PRINT "level 1"πDOπqqqq = qqqq + 1πLOOP UNTIL qqqq = 5000πLOCATE 16, 30: PRINT "                "πLOCATE 17, 20: PRINT "                                     "πLOCATE 28, 43: PRINT "press p to pause and e to quit"πqwe = 0πRANDOMIZE TIMERπFOR ab = 1 TO 150π  ac = INT(RND * 629) + 1π  ad = INT(RND * 429) + 1π  PSET (ac, ad)πNEXT abπa = 50πb = 240πCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πm = 450πn = 300πx = 500πy = 270πvc = 9πcx = 14πop = 470πpo = 270πlevel = 1πlife = 3πcleer = 0πCIRCLE (m, n), 10, vcπCIRCLE (x, y), 10, cxπCONST true = -1πCONST false = NOT trueπLOCATE 28, 5: PRINT "level:"πLOCATE 28, 17: PRINT "lives:"πLOCATE 28, 28: PRINT "score:"π100 DOπLINE (1, 1)-(630, 430), 8, BπLINE (1, 430)-(630, 479), 8, BπLOCATE 28, 11: PRINT levelπLOCATE 28, 23: PRINT lifeπLOCATE 28, 34: PRINT scoreπwwww = wwww + 1πIF wwww = 50 THEN LOCATE 14, 35: PRINT "       "πIF chan = true AND (score MOD 800) = 0 THENπchan = falseπlife = life + 1πEND IFπIF bn >= 16 AND bn < 31 AND ty < 40 THENπIF bn = 30 THEN uj = 1          ' no more circlesπCIRCLE (op, po), 75, 0πml = ml + 1πIF ml < 100 THEN po = po - 1πIF ml > 100 THEN po = po + 1πIF ml >= 200 THEN ml = 0πIF bn < 30 THEN clo = 7πIF bn = 30 THEN clo = 9πCIRCLE (op, po), 75, cloπRANDOMIZE TIMERπnl = INT(RND * 30) + 1πSELECT CASE nlπCASE 10πRANDOMIZE TIMERπbl = INT(RND * 6) + 1πSELECT CASE blπCASE IS < 7πchange = trueπEND SELECTπCASE ELSE: change = falseπEND SELECTπEND IFπIF change = true THENπSELECT CASE blπCASE 1πol = opπoo = poπoll = opπooo = poπDOπqi = qi + 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo - 60)-(ol - 10, oo - 60), 0πLINE (oll, ooo)-(oll - 10, ooo), 0πol = ol - 50πoll = oll - 50πLINE (ol, oo - 60)-(ol - 10, oo - 60), 4πLINE (oll, ooo)-(oll - 10, ooo), 4πLOOP UNTIL qi >= 50πqi = 0πCASE 2πol = opπoo = poπoll = opπooo = poπDOπqi = qi + 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo - 40)-(ol - 10, oo - 40), 0πLINE (oll, ooo)-(oll - 10, ooo), 0πol = ol - 50πoll = oll - 50πLINE (ol, oo - 40)-(ol - 10, oo - 40), 4πLINE (oll, ooo)-(oll - 10, ooo), 4πLOOP UNTIL qi >= 50πqi = 0πCASE 3πol = opπoo = poπoll = opπooo = poπDOπqi = qi + 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo + 60)-(ol - 10, oo + 60), 0πLINE (oll, ooo)-(oll - 10, ooo), 0πol = ol - 50πoll = oll - 50πLINE (ol, oo + 60)-(ol - 10, oo + 60), 4πLINE (oll, ooo)-(oll - 10, ooo), 4πLOOP UNTIL qi >= 50πqi = 0πCASE 4πol = opπoo = poπoll = opπooo = poπDOπqi = qi + 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo + 40)-(ol - 10, oo + 40), 0πLINE (oll, ooo)-(oll - 10, ooo), 0πol = ol - 50πoll = oll - 50πLINE (ol, oo + 40)-(ol - 10, oo + 40), 4πLINE (oll, ooo)-(oll - 10, ooo), 4πLOOP UNTIL qi >= 50πqi = 0πCASE 5πol = opπoo = poπoll = opπooo = poπool = opπloo = poπDOπqi = qi + 1πIF (ool - 10) < (a + 50) AND (ool - 10) > (a - 40) AND loo < (b + 15) AND loo > (b - 15) THEN GOTO 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo - 60)-(ol - 10, oo - 60), 0πLINE (ool, loo + 60)-(ool - 10, loo + 60), 0πLINE (oll, ooo)-(oll - 10, ooo), 0πol = ol - 50πoll = oll - 50πool = ool - 50πLINE (ol, oo - 60)-(ol - 10, oo - 60), 4πLINE (ool, loo + 60)-(ool - 10, loo + 60), 4πLINE (oll, ooo)-(oll - 10, ooo), 4πLOOP UNTIL qi >= 50πqi = 0πCASE 6πol = opπoo = poπoll = opπooo = poπool = opπloo = poπDOπqi = qi + 1πIF (ool - 10) < (a + 50) AND (ool - 10) > (a - 40) AND loo < (b + 15) AND loo > (b - 15) THEN GOTO 1πIF (oll - 10) < (a + 50) AND (oll - 10) > (a - 40) AND ooo < (b + 15) AND ooo > (b - 15) THEN GOTO 1πIF (ol - 10) < (a + 50) AND (ol - 10) > (a - 40) AND oo < (b + 15) AND oo > (b - 15) THEN GOTO 1πLINE (ol, oo - 40)-(ol - 10, oo - 40), 0πLINE (ol, oo + 40)-(ol - 10, oo + 40), 0πLINE (ol, oo)-(ol - 10, oo), 0πool = ool - 50πoll = oll - 50πol = ol - 50πLINE (ol, oo - 40)-(ol - 10, oo - 40), 4πLINE (oll, ooo + 40)-(oll - 10, ooo + 40), 4πLINE (ool, loo)-(ool - 10, loo), 4πLOOP UNTIL qi >= 50πqi = 0πEND SELECTπEND IFπIF circ = 1 AND sfd = 1 AND uj = 0 THENπRANDOMIZE TIMERπvc = INT(RND * 16)πcx = INT(RND * 16)π2 m = INT(RND * 600) + 1πIF m < 20 THEN GOTO 2π3 n = INT(RND * 450) + 1πIF n < 20 THEN GOTO 3π4 x = INT(RND * 600) + 1πIF x < 20 THEN GOTO 4π5 y = INT(RND * 450) + 1πIF y < 20 THEN GOTO 5πcirc = 0πsfd = 0πEND IFπIF level = 2 THEN GOTO 333πIF m <= 1 OR m >= 630 OR n <= 1 OR n >= 425 THENπCIRCLE (m, n), 10, 0πRANDOMIZE TIMERπm = INT(RND * 600) + 1πn = INT(RND * 450) + 1πLOCATE 28, 5: PRINT "level:"πLOCATE 28, 17: PRINT "lives:"πLOCATE 28, 28: PRINT "score:"πLOCATE 28, 43: PRINT "press p to pause and e to quit"πELSEIF x <= 1 OR x >= 630 OR y <= 1 OR y >= 425 THENπCIRCLE (x, y), 10, 0πRANDOMIZE TIMERπx = INT(RND * 600) + 1πy = INT(RND * 450) + 1πLOCATE 28, 5: PRINT "level:"πLOCATE 28, 17: PRINT "lives:"πLOCATE 28, 28: PRINT "score:"πLOCATE 28, 43: PRINT "press p to pause and e to quit"πEND IFπIF (a - 40) <= 1 OR (a + 50) >= 630 OR (b - 10) <= 1 OR (b + 10) >= 425 THENπCIRCLE (a, b), 40, 0, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 0πRANDOMIZE TIMERπa = INT(RND * 600) + 1πb = INT(RND * 450) + 1πCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πLOCATE 28, 5: PRINT "level:"πLOCATE 28, 17: PRINT "lives:"πLOCATE 28, 28: PRINT "score:"πLOCATE 28, 43: PRINT "press e to quit and p to pause"πEND IFπRANDOMIZE TIMERπIF circ = 0 THENπxy = INT(RND * 5) + 1πSELECT CASE xyπCASE 1πCIRCLE (m, n), 10, 0πm = m + 10πCIRCLE (m, n), 10, vcπCASE 2πCIRCLE (m, n), 10, 0πm = m - 10πCIRCLE (m, n), 10, vcπCASE 3πCIRCLE (m, n), 10, 0πn = n - 10πCIRCLE (m, n), 10, vcπCASE 4πCIRCLE (m, n), 10, 0πn = n + 10πCIRCLE (m, n), 10, vcπCASE 5πRANDOMIZE TIMERπaw = INT(RND * ((vc + 10) * 2)) + 1πSELECT CASE awπCASE 20πaz = mπFOR aa = 1 TO 130πIF (az - 30) <= (a + 50) AND (az - 30) >= (a - 50) AND n < (b + 20) AND n > (b - 20) THENπ1 life = life - 1πDOπjk = jk + 1πCIRCLE (a, b), jk, 4πLOOP UNTIL jk = 70πjk = 80πDOπjk = jk - 1πCIRCLE (a, b), jk, 0πLOOP UNTIL jk = 0πIF life = 0 THEN GOTO 333πGET (180, 179)-(440, 251), dedπLINE (180, 179)-(440, 251), 15, BπLINE (181, 180)-(439, 250), 8, BFπDOπSELECT CASE INKEY$πCASE CHR$(32): fill0 = 0: EXIT DOπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπLINE (181, 180)-(439, 250), 8, BπIF fill0 = 0 THENπCOLOR 15πLOCATE 13, 30: PRINT "You disappoint me."πLOCATE 15, 26: PRINT "press space bar to continue"πEND IFπPAINT (300, 195), 8, 15πPAINT (300, 240), 8, 15πfill0 = 1πLOOPπPUT (180, 179), ded, PSETπCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πEXIT FORπEND IFπLINE (az - 10, n)-(az - 30, n), 0πaz = az - 5πLINE (az - 10, n)-(az - 30, n), 4πNEXT aaπEND SELECTπEND SELECTπEND IFπIF sfd = 0 THENπRANDOMIZE TIMERπyu = INT(RND * 5) + 1πSELECT CASE yuπCASE 1πCIRCLE (x, y), 10, 0πx = x + 10πCIRCLE (x, y), 10, cxπCASE 2πCIRCLE (x, y), 10, 0πx = x - 10πCIRCLE (x, y), 10, cxπCASE 3πCIRCLE (x, y), 10, 0πy = y - 10πCIRCLE (x, y), 10, cxπCASE 4πCIRCLE (x, y), 10, 0πy = y + 10πCIRCLE (x, y), 10, cxπCASE 5πRANDOMIZE TIMERπaq = INT(RND * ((cx + 10) * 2)) + 1πSELECT CASE aqπCASE 20πsw = xπFOR se = 1 TO 130πIF (sw - 30) <= (a + 50) AND (sw - 30) >= (a - 50) AND y < (b + 20) AND y > (b - 20) THENπlife = life - 1πDOπff = ff + 1πCIRCLE (a, b), ff, 4πLOOP UNTIL ff = 70πff = 80πDOπff = ff - 1πCIRCLE (a, b), ff, 0πLOOP UNTIL ff = 0πGET (180, 179)-(440, 251), dedπLINE (180, 179)-(440, 251), 15, BπLINE (181, 180)-(439, 250), 8, BFπDOπSELECT CASE INKEY$πCASE CHR$(32): fill0 = 0: EXIT DOπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπLINE (181, 180)-(439, 250), 8, BπIF fill0 = 0 THENπCOLOR 15πLOCATE 13, 30: PRINT "You disappoint me."πLOCATE 15, 26: PRINT "press space bar to continue"πEND IFπPAINT (300, 195), 8, 15πPAINT (300, 240), 8, 15πfill0 = 1πLOOPπPUT (180, 179), ded, PSETπCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πEXIT FORπEND IFπIF life = 0 THEN GOTO 333πLINE (sw - 10, y)-(sw - 30, y), 0πsw = sw - 5πLINE (sw - 10, y)-(sw - 30, y), 6πNEXT seπEND SELECTπEND SELECTπEND IFπ333 IF life = 0 OR level = 2 THENπ33 CLSπFOR tbg = 1 TO 20πRANDOMIZE TIMERπtbf = INT(RND * 620) + 1πtbd = INT(RND * 460) + 1πtbc = INT(RND * 15) + 1πCIRCLE (tbf, tbd), 10, tbcπNEXT tbgπFOR stb = 1 TO 100πRANDOMIZE TIMERπynh = INT(RND * 630) + 1πyng = INT(RND * 470) + 1πPSET (ynh, yng)πNEXT stbπLOCATE 12, 31: PRINT "G A M E    O V E R !"πLOCATE 15, 30: PRINT "you made it to level"; levelπLOCATE 16, 30: PRINT "your score is"; scoreπSELECT CASE ac2πCASE 0: LOCATE 17, 30: PRINT "accuracy: 0 %"πCASE ELSE: LOCATE 17, 30: PRINT "accuracy:"; CINT((ac1 / ac2) * 100); "%"πEND SELECTπDOπcleer = cleer + 1πSELECT CASE INKEY$πCASE CHR$(32): cleer = cleer - 5πEND SELECTπLOOP UNTIL cleer = 1000πLOCATE 25, 27: PRINT "PRESS SPACE BAR TO CONTINUE"πDOπSELECT CASE INKEY$πCASE CHR$(32)πCLSπPAINT (1, 1), 8πPSET (10, 60): DRAW "r55l55d100u50r50"πPSET (70, 60): DRAW "r50l25d100l25r50"πPSET (125, 60): DRAW "r50d50l50u50d100u50f50"πPSET (180, 60): DRAW "r50l50d50r25l25d50r50"πPSET (330, 60): DRAW "r50l50d50r50d50l50"πPSET (390, 60): DRAW "r50l25d100"πPSET (450, 60): DRAW "r50d100l50u100"πPSET (510, 60): DRAW "r50d50l50u50d100u50f50"πPSET (570, 60): DRAW "d100u100f25e25d100"πLOCATE 17, 30: PRINT "PLAY AGAIN?"πLOCATE 20, 40: PRINT "YES"πLOCATE 23, 40: PRINT "NO"πa = 180: b = 310πCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πDOπSELECT CASE INKEY$πCASE CHR$(0) + "M" 'rightπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 310: b = 359πCASE 359: b = 310πEND SELECTπCASE CHR$(0) + "P" 'downπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 310: b = 359πCASE 359: b = 310πEND SELECTπCASE CHR$(0) + "K" 'leftπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 310: b = 359πCASE 359: b = 310πEND SELECTπCASE CHR$(0) + "H" 'upπCIRCLE (a, b), 40, 8, , , (2 / 15)πLINE (a + 40, b)-(a + 50, b), 8πSELECT CASE bπCASE 310: b = 359πCASE 359: b = 310πEND SELECTπCASE CHR$(32)πSELECT CASE bπCASE 310: GOTO 34πCASE 359πCLSπLOCATE 10, 36: PRINT "BYE  BYE"πENDπEND SELECTπEND SELECTπCIRCLE (a, b), 40, , , , (2 / 15)πLINE (a + 40, b)-(a + 50, b)πLOOPπEND SELECTπLOOPπEND IFπ321 SELECT CASE INKEY$πCASE CHR$(0) + "M": CIRCLE (a, b), 40, 0, , , (2 / 15): LINE (a + 40, b)-(a + 50, b), 0πa = a + 20: CIRCLE (a, b), 40, , , , (2 / 15): LINE (a + 40, b)-(a + 50, b)πCASE CHR$(0) + "K": CIRCLE (a, b), 40, 0, , , (2 / 15): LINE (a + 40, b)-(a + 50, b), 0πa = a - 20: CIRCLE (a, b), 40, , , , (2 / 15): LINE (a + 40, b)-(a + 50, b)πCASE CHR$(0) + "H": CIRCLE (a, b), 40, 0, , , (2 / 15): LINE (a + 40, b)-(a + 50, b), 0πb = b - 20: CIRCLE (a, b), 40, , , , (2 / 15): LINE (a + 40, b)-(a + 50, b)πCASE CHR$(0) + "P": CIRCLE (a, b), 40, 0, , , (2 / 15): LINE (a + 40, b)-(a + 50, b), 0πb = b + 20: CIRCLE (a, b), 40, , , , (2 / 15): LINE (a + 40, b)-(a + 50, b)πCASE "p"πGET (262, 179)-(363, 251), pazπLINE (262, 179)-(363, 251), 15, BπLINE (263, 180)-(362, 250), 8, BFπDOπSELECT CASE INKEY$πCASE "p": fill0 = 0: EXIT DOπCASE "P": fill0 = 0: EXIT DOπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπLINE (263, 180)-(362, 250), 8, BπIF fill0 = 0 THENπCOLOR 15πLOCATE 13, 35: PRINT "paused..."πLOCATE 14, 35: PRINT "press p to"πLOCATE 15, 35: PRINT "continue"πEND IFπPAINT (300, 220), 8, 15πfill0 = 1πLOOPπPUT (262, 179), paz, PSETπCASE "P"πGET (262, 179)-(363, 251), pazπLINE (262, 179)-(363, 251), 15, BπLINE (263, 180)-(362, 250), 8, BFπDOπSELECT CASE INKEY$πCASE "p": fill0 = 0: EXIT DOπCASE "P": fill0 = 0: EXIT DOπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπLINE (263, 180)-(362, 250), 8, BπIF fill0 = 0 THENπCOLOR 15πLOCATE 13, 35: PRINT "paused..."πLOCATE 14, 35: PRINT "press p to"πLOCATE 15, 35: PRINT "continue"πEND IFπPAINT (300, 220), 8, 15πfill0 = 1πLOOPπPUT (262, 179), paz, PSETπCASE CHR$(32)πac2 = ac2 + 1πd = aπFOR r = 1 TO 28π  IF (d + 75) <= (m + 10) AND (d + 75) >= (m - 10) AND b <= (n + 10) AND b >= (n - 10) AND circ = 0 THENπ  ac1 = ac1 + 1π  SELECT CASE vcπ  CASE 0: score = score + 90π  CASE 1: score = score + 75π  CASE 2: score = score + 70π  CASE 3: score = score + 65π  CASE 4: score = score + 60π  CASE 5: score = score + 55π  CASE 6: score = score + 50π  CASE 7: score = score + 45π  CASE 8: score = score + 40π  CASE 9: score = score + 35π  CASE 10: score = score + 30π  CASE 11: score = score + 25π  CASE 12: score = score + 20π  CASE 13: score = score + 15π  CASE 14: score = score + 10π  CASE 15: score = score + 5π  CASE 16: score = score + 5π  END SELECTπ  chang = trueπ  bn = bn + 1π  circ = 1π  DOπ  z = z + 1π  CIRCLE (m, n), z, 4π  LOOP UNTIL z = 25π  z = 27π  DOπ  z = z - 1π  CIRCLE (m, n), z, 0π  LOOP UNTIL z = 0π  LINE (d + 55, b)-(d + 75, b), 0π  EXIT FORπ  ELSEIF (d + 75) <= (x + 10) AND (d + 75) >= (x - 10) AND b <= (y + 10) AND b >= (y - 10) AND sfd = 0 THENπ  ac1 = ac1 + 1π  SELECT CASE cxπ  CASE 0: score = score + 90π  CASE 1: score = score + 75π  CASE 2: score = score + 70π  CASE 3: score = score + 65π  CASE 4: score = score + 60π  CASE 5: score = score + 55π  CASE 6: score = score + 50π  CASE 7: score = score + 45π  CASE 8: score = score + 40π  CASE 9: score = score + 35π  CASE 10: score = score + 30π  CASE 11: score = score + 25π  CASE 12: score = score + 20π  CASE 13: score = score + 15π  CASE 14: score = score + 10π  CASE 15: score = score + 5π  CASE 16: score = score + 5π  END SELECTπ  chang = trueπ  bn = bn + 1π  sfd = 1π  DOπ  z = z + 1π  CIRCLE (x, y), z, 4π  LOOP UNTIL z = 25π  z = 27π  DOπ  z = z - 1π  CIRCLE (x, y), z, 0π  LOOP UNTIL z = 0π  LINE (d + 55, b)-(d + 75, b), 0π  EXIT FORπ  ELSEIF (d + 75) <= (op + 75) AND (d + 75) >= (op - 75) AND b <= (po + 75) AND b >= (po - 75) AND ty < 40 AND bn = 30 THENπ  ac1 = ac1 + 1π  chang = trueπ  gv = (d + 75)π  ty = ty + 1π  score = score + 2π  IF ty = 30 THENπ  chang = trueπ  sfd = 1π  circ = 1π  uj = 0π  score = score + 150π  level = level + 1π  bn = bn + 1π  DOπ  qas = qas + 1π  RANDOMIZE TIMERπ10 ra = INT(RND * (op + 75)) + 1π  IF ra < (op - 75) THEN GOTO 10π11 ar = INT(RND * (po + 75)) + 1π  IF ar < (po - 75) THEN GOTO 11π  DOπ  qaz = qaz + 1π  CIRCLE (ra, ar), qaz, 4π  LOOP UNTIL qaz = 40π  qaz = 42π  DOπ  qaz = qaz - 1π  CIRCLE (ra, ar), qaz, 0π  LOOP UNTIL qaz = 0π  LOOP UNTIL qas = 50π  CIRCLE (op, po), 75, 0π  FOR star = 1 TO 50π    ac = INT(RND * 630)π    ad = INT(RND * 470)π    PSET (ac, ad)π  NEXT starπ  SELECT CASE scoreπ  CASE 900 TO 1099: life = life + 1π  CASE 1100 TO 1300: life = life + 3π  CASE IS >= 1301: life = life + 10π  END SELECTπ  END IFπ  DOπ  yt = yt + 1π  CIRCLE (gv, b), yt, 4π  LOOP UNTIL yt = 20π  yt = 22π  DOπ  yt = yt - 1π  CIRCLE (gv, b), yt, 0π  LOOP UNTIL yt = 0π  LINE (d + 55, b)-(d + 75, b), 0π  EXIT FORπ  END IFπ  LINE (d + 55, b)-(d + 80, b), 0π  d = d + 20π  LINE (d + 55, b)-(d + 80, b), 3πNEXT rπCASE "e": GOTO 33πCASE "E": GOTO 33πEND SELECTπLOOPππJacques Mallah                 JACK'S GAME                    pages.nyu.edu/~jqm1584/        03-06-96 (09:55)       QB, QBasic, PDS        237  13069    JGS.BAS     'JGS.BAS by Jacques MallahπH = 5: RANDOMIZE TIMER: SCREEN 7: L = TIMERπJ: M = M + 1: IF TIMER - L < .4 THEN GOTO JπM = M / 500: X = 2: Y = 10: BX = 38: BY = 10: FC = 16: OXP = -10: OYP = -10πMM = M: ZX = 38: ZY = 2: DIM UA(0 TO 7, 0 TO 7): XP = X * 8 - 4: YP = 76: DIM BA(0 TO 7, 0 TO 7)πDIM A(0 TO 7, 0 TO 7): GOSUB 10: GOSUB 10: BH = 1: LOCATE 1, 1: PRINT "H=  5.00", "S="; S, "BH="; BH: LOCATE 3, 10: PRINT "J A C K 'S  G A M E"πPRINT "KILL THE BAD GUY,   NOW."; : PUT (18 * 8, 24), BAπPRINT "TO SURVIVE MORE SHOTS, PICK UP:": PRINT "H FOR 1 H, "; : COLOR 9: PRINT "H"; : COLOR 15: PRINT " FOR 3 H POINTS."πPRINT "USE CURSOR TO MOVE AND ALMOST ANY OTHER KEY TO SHOOT WHEN "; : COLOR 14: PRINT "-"; : COLOR 15: PRINT " IS WHITE."πLOCATE 12, 1: PRINT "H= # OF HITS YOU CAN TAKE.": PRINT "S= YOUR SCORE": PUT (BX * 8 - 8, BY * 8 - 8), BA: PUT (XP - 4, YP - 4), UA:πLINE (XP + 5, YP)-(XP + 10, YP), 14πPRINT "BH= # OF HITS BAD GUY CAN TAKE.": PRINT "BAD GUYS WOUND YOU AT CLOSE RANGE.": PRINT "H AND "; : COLOR 9: PRINT "H"; : COLOR 15:πPRINT " DON'T MOVE RANDOMLY.": PRINT "YOU CAN TURN AROUND BOUNCING OFF WALLS": PRINT : PRINT "PAUSE PAUSES IT."πPRINT "ON SOME MACHINES, DON'T PRESS KEYS": PRINT "TOO OFTEN, TO AVOID BACKUP.": PRINT "PRESS ONLY ONE KEY AT A TIME."πPRINT "PRESS S FOR SOUND."πTX = 33: TY = 12: LOCATE TY, TX: PRINT "H"; : LOCATE ZY, ZX: COLOR 9: PRINT "H";πCOLOR 15: LOCATE 25, 1: PRINT "PRESS ANY KEY (NOT S) TO START"; : Q = 1: OTY = TY: OTX = TX: OZX = ZX: OZY = ZYπDC = .8 ^ (1 / M): Z = 11 * M ^ 2: NB = M * .14: PS = 1.5 / M: INJ = 1πSS = 3.3 / M: VX = .1 / M: RV = -VX: RR = 1.0013 ^ (1 / M)πIK: I$ = INKEY$: IF I$ = "" THEN GOTO IKπIF UCASE$(I$) <> "S" THEN LINE (XP - 5, YP)-(XP - 10, YP), 0: LINE (0, 176)-(319, 199), 0, BF: GOTO 1πIF SSS = 0 THEN SSS = 1: LOCATE 23, 1: PRINT "PRESS S FOR NO SOUND.": GOTO IKπIF SSS = 1 THEN SSS = 0: LOCATE 23, 1: PRINT "PRESS S FOR SOUND.   ": GOTO IKπG: TX = INT(2 + RND * 36): TY = INT(2 + RND * 21): VTY = 0π1 C = C + PS * .61πIF ZB < TIMER THENπLINE (OBX * 8 - 8, OBY * 8 - 8)-(OBX * 8, OBY * 8), 0, BFπIF Q = 1 THENπIF INJ = 1 THEN PUT (BX * 8 - 8, BY * 8 - 8), BAπELSE Q = 1: CLS : PUT (0, 0), BA: GOSUB Q: GOSUB P: ZB = ZB + 4πEND IFπEND IFπLOCATE OTY, OTX: PRINT " "; : LOCATE OZY, OZX: PRINT " "; : OTY = TY: OTX = TX: OZY = ZY: OZX = ZXπLOCATE 1, 1: PRINT USING "H= ##.##&"; H: LOCATE 1, 15: PRINT "S="; S, "BH="; BHπLOCATE TY, TX: PRINT "H";πLOCATE ZY, ZX: COLOR 9: PRINT "H"; : COLOR 15πIF RV > 2.5 / M THEN VX = VX * 2.5 / RV / M: VY = VY * 2.5 / RV / M: RV = 2.5 / MπI$ = RIGHT$(INKEY$, 1)πON (BZ + Q) GOSUB 200, 200, 200, 210, 220, 230, 240, 250, 250, 250πIF I$ = "H" THEN VY = VY - .08 / NB: GOTO 2πIF I$ = "P" THEN VY = VY + .08 / NB: GOTO 2πIF I$ = "K" THEN VX = VX - .1 / NB: GOTO 2πIF I$ = "M" THEN VX = VX + .1 / NB: GOTO 2πIF I$ = "" THEN 2πIF FC < 33 THENπI$ = INKEY$πELSEπSOUND 450, 1 * SSSπLINE (SX + VSX, SY + VSY)-(SX - VSX, SY - VSY), 0: BS = 0πFC = 0: VSX = VX / RV * 4: VSY = VY / RV * 4: SF = 1: SX = XP: SY = YPπEND IFπ2 R = ((X - BX) ^ 2 + ((Y - BY) * 1.25) ^ 2) ^ .5 + .01πLINE (XP - 4, YP - 4)-(XP + 4, YP + 4), 0, BFπLINE (XP + XPV * 5, YP + YPV * 5)-(XP + VXP * 10, YP + VYP * 10), 0, BFπX = X + VX: IF X < 2 OR X > 38 THEN X = X - VX: VX = -VX * .4: GOSUB DEP: IF VY ^ 2 > .0000001 THEN VY = VY * .3πY = Y + VY: IF Y < 2 OR Y > 23 THEN Y = Y - VY: VY = -VY * .4: GOSUB DEP: IF VX ^ 2 > .0000001 THEN VX = VX * .3πJX = 10000: IF (VX * 10) ^ 2 * M > .0000001 * JY THEN VX = VX * DC: JX = 1πJY = 10000: IF (VY * 10) ^ 2 * M > .0000001 * JX THEN VY = VY * DC: JY = 1πXP = X * 8 - 4: YP = Y * 8 - 4: PUT (XP - 4, YP - 4), UAπRV = ((VX) ^ 2 + (1.25 * VY) ^ 2) ^ .5: FC = FC + SS * .9: IF RV > .4 / M THEN DC = .8 ^ (1 / M) ELSE DC = .6 ^ (1 / M)πVXP = VX / RV: VYP = VY / RV: LINE (XP + VXP * 5, YP + VYP * 5)-(XP + VXP * 10, YP + VYP * 10), 14 - (FC > 32)πIF SF = 1 THENπLINE (SX + VSX, SY + VSY)-(SX - VSX, SY - VSY), 0πDD = (BX * 8 - 4 - SX) * VSX / 4 + (BY * 8 - 4 - SY) * VSY * 1.25 ^ 2 / 4πDE = (BX * 8 - 4 - SX) ^ 2 + ((BY * 8 - 4 - SY) * 1.25) ^ 2 - (DD ^ 2)πIF DD > -6 AND DD < 8 + 3 * 4 * SS AND DE < 75 THENπIF Q = 1 AND TIMER > ZB AND BS = 0 THEN BH = BH - 1: S = S + 2 * BZ + 2: SF = 0: CLS : GOSUB TBASE: BS = 1πIF BH <= 0 THENπBZ = BZ + 1: Q = 0: LINE (BX * 8 - 8, BY * 8 - 8)-(BX * 8, BY * 8), 0, BF: BH = BZ: GOSUB 10: ZB = TIMER + 5: PS = (1.5 + .08 * BH) / M:πVBX = VBX + (RND * 2 - 1) / M: VBY = VBY * (RND * 1.6 - .8) / MπIF BZ = 5 THEN INJ = 1πIF BZ > 4 THEN PS = 2 / MπIF BZ < 8 THEN BX = 38: BY = 2 + RND * 21: VBX = (RND - .5) / M: VBY = (RND - .5) / M ELSE EEP = 1πEND IFπEND IFπSX = SX + VSX * SS * 3: SY = SY + VSY * SS * 3πIF SF = 1 THEN LINE (SX + VSX, SY + VSY)-(SX - VSX, SY - VSY), 13πEND IFπVTY = VTY + .02 / M ^ 2: TY = TY + VTY: IF TY > 23 OR TY < 2 THEN VTY = -VTY: TY = TY + VTYπIF (X - TX) ^ 2 + ((Y - TY) * 1.25) ^ 2 < 1.1 THEN S = S + CINT(BZ / 2) + 1: H = H + 1: GOTO GπVZX = VZX * .99 ^ (1 / M) + (TX - ZX) / 72 / M ^ 2: ZX = ZX + VZXπVZY = VZY * .99 ^ (1 / M) + (TY - ZY) / 90 / M ^ 2: ZY = ZY + VZYπIF ZX + VZX > 38 OR ZX + VZX < 2 THEN VZX = -VZXπIF ZY + VZY > 23 OR ZY + VZY < 2 THEN VZY = -VZYπIF INT(X + .5) = CINT(ZX) AND INT(Y + .5) = INT(ZY + .5) THEN S = S + CINT(BZ / 2) + 1: H = H + 3: ZX = 38: ZY = 2: VZY = 0: VZX = -RND * 3 / MπIF Q = 0 OR TIMER < ZB THEN GOTO BπVBX = VBX * .9 ^ (1 / M) + (X - BX) / R / Z + (RND - .5) / Z * 1.9πVBY = VBY * .9 ^ (1 / M) + (Y - BY) / Z / 1.25 / R + (RND - .5) / Z * 1.52πIF BX + VBX > 38 OR BX + VBX < 2 THEN VBX = -VBXπIF BY + VBY > 24 OR BY + VBY < 2 THEN VBY = -VBYπOBX = BX: OBY = BY: BX = BX + VBX: BY = BY + VBYπIF INT(X + .5) = INT(.5 + BX) AND INT(Y + .5) = INT(BY + .5) THEN H = H - .4 / M: LINE (0, 0)-(319, 199), 4, BF: CLSπB: IF C <= 14 THEN GOTO SMπIF Q = 1 AND TIMER > ZB THENπSOUND 750, 1 * SSSπEEP = 0: LINE ((FX + VFX) * 8 - 4, (FY + VFY) * 8 - 4)-((FX - VFX) * 8 - 4, (FY - VFY) * 8 - 4), 0πFX = BX: FY = BY: RVF = (((X - BX) + VX * R / PS / 3) ^ 2 + (((Y - BY) + VY * R / PS / 3) * 1.25) ^ 2) ^ .5πVFX = ((X - BX) + VX * R / PS / 3) / 2 / RVF: VFY = ((Y - BY) + VY * R / PS / 3) / 2 / RVF: C = 0: F = 0πELSEπF = 1πEND IFπSM: DD = (X - FX) * VFX * 2 + (Y - FY) * VFY * 1.25 ^ 2 * 2πDE = (X - FX) ^ 2 + (Y - FY) ^ 2 * 1.25 ^ 2 - (DD ^ 2)πLINE ((FX + VFX) * 8 - 4, (FY + VFY) * 8 - 4)-((FX - VFX) * 8 - 4, (FY - VFY) * 8 - 4), 0πIF DD > -.5 AND DD < .5 + 3 * .5 * PS AND DE < .8 AND F = 0 THEN H = H - 1: F = 1: TFK = TIMER + 1: LINE (0, 0)-(319, 199), 4, BF: GOSUB TBASE: CLS : IF ZB > TIMER THEN LOCATE 3, 1: PRINT "BAD GUY:": PRINT F$πFX = FX + VFX * PS * 3: FY = FY + VFY * PS * 3πIF F = 0 THEN LINE ((FX + VFX) * 8 - 4, (FY + VFY) * 8 - 4)-((FX - VFX) * 8 - 4, (FY - VFY) * 8 - 4), 4πS = S * RR: IF H > 0 THEN 1πCLSπ3 GOSUB DEP: S = INT(S): COLOR 15: GOTO 50π7 CLS : PP = 0: IF BH < 9 THEN PRINT "ENTER S TO SEE HIGH SCORES"πPRINT "S ="; S: PP = 0: INPUT "ANOTHER GAME(Y/DEFAULT = NO)"; Y$πIF Y$ = "Y" OR Y$ = "y" THEN CLS : RUNπIF (Y$ = "S" OR Y$ = "s") AND BH < 9 THEN 51πENDπDEP:  I$ = INKEY$: IF I$ <> "" THEN GOTO DEPπSOUND 600, 1 * SSS: RETURNπTBASE: FOR T = 1 TO 90 * (M - 1): NEXT: SOUND 300, 1 * SSS: RETURNπQ: IF BZ > 7 THEN RETURNπFOR C = 0 TO 7: FOR T = 0 TO 7: A(C, T) = POINT(C, T): NEXT: NEXTπFOR N = 1 TO 6 STEP 1 / MMπFOR C = 0 TO 7: I$ = INKEY$: FOR T = 0 TO 7πLINE (C * N, T * N)-(C * N + N - 1, T * N + N - 1), A(C, T), BFπNEXT: NEXT: NEXT: GOSUB DEP: CLS : RETURNπP: IF BZ < 9 AND Q = 0 THEN READ F$πIF BZ = 0 THEN LOCATE 9, 1: PRINT F$πIF BZ < 9 AND BZ <> 0 THEN LOCATE 3, 1: PRINT "BAD GUY:": PRINT F$πIF BZ = 9 THEN LOCATE 4, 1: PRINT "IF YOU DISPEL ITS FORM A THIRD TIME": PRINT "IT WILL BE BANISHED"πRETURNπ10 IF BZ > 1 THEN BH = BH - 1: IF BH > 6 THEN BH = 6πIF BZ = 2 THEN RETURNπIF BZ = 10 THEN 15πIF BZ < 8 THEN READ F1, F2, F3, F4: LOCATE 1, 1: PRINT " "πLINE (3, 0)-(4, 1), F1, B: LINE (7, 5)-(7, 5), F1: LINE (0, 5)-(0, 5), F1πLINE (1, 2)-(6, 2), F2: LINE (3, 3)-(4, 4), F2, B: LINE (0, 3)-(0, 4), F2πLINE (7, 3)-(7, 4), F2: LINE (3, 5)-(2, 6), F3: LINE (4, 5)-(5, 6), F3πLINE (0, 7)-(1, 7), F4: LINE (6, 7)-(7, 7), F4πIF AU = 0 THEN GET (0, 0)-(7, 7), UA: AU = 1: GOSUB Q: GOSUB P: RETURNπGET (0, 0)-(7, 7), BA: IF BZ = 0 THEN GOSUB QπGOSUB P: RETURNπDATA 6,9,1,8,,6,8,8,8,"THE BAD GUY NOW IS A SECURITY GUARD",6,2,2,2,"ARMY GUY",6,6,15,6,"KARATE MASTER - STUN SHOTS"πDATA 6,0,0,0,"NINJA - INVISIBILITY",8,8,8,8,"ROBOT - HEAT SEEKING SHOTS",8,2,2,2,"ARMY ROBOT - EXPLOSIVE SHOTS",4,4,4,4,"DEMON - CAN TELEPORT"πDATA "CAN IT BE DEAD?"π15 S = S * 1.5: PAINT (100, 100), 5, 12: COLOR 0πFOR T = 0 TO 6000 * M STEP 9: A = T * ATN(1) / 180 * 4: R = T / 30πIF T > 33000 THEN FOR JH = 1 TO M * 10000: NEXT: EXIT FORπLINE (150 - R * COS(A), 95 - SIN(A) * R * .8)-(150 + R * .25, 95 - R * .25)πNEXT: DIM LX(-1 TO 1, -1 TO 1): DIM LY(-1 TO 1, -1 TO 1): X = 20: Y = 27πDIM VLX(-1 TO 1, -1 TO 1): DIM VLY(-1 TO 1, -1 TO 1): SCREEN 0πFOR C = 9 TO 15: COLOR CπEX = 0: VS = -.83 - RND / 7: X = 17 + 6 * RNDπFOR T = -1 TO 1: FOR A = -1 TO 1: VLY(T, A) = VS: VLX(T, A) = 0πLX(T, A) = X: LY(T, A) = Y: NEXT: NEXTπ20 FOR T = -1 TO 1: FOR A = -1 TO 1πIF LX(T, A) > .5 AND LX(T, A) < 40 AND LY(T, A) > .5 AND LY(T, A) < 25 THENπFOR R = 0 TO M: LOCATE LY(T, A), LX(T, A): PRINT "`"; : NEXTπEND IFπVLY(T, A) = VLY(T, A) + .02: LY(T, A) = LY(T, A) + VLY(T, A): LX(T, A) = LX(T, A) + VLX(T, A)πIF LX(T, A) > .5 AND LX(T, A) < 40 AND LY(T, A) > .5 AND LY(T, A) < 25 THENπFOR R = 0 TO M: LOCATE LY(T, A), LX(T, A): PRINT "*"; : NEXTπEND IFπNEXT: NEXTπIF VLY(0, 0) > 0 AND EX = 0 THENπEX = 1: FOR T = -1 TO 1: FOR A = -1 TO 1πR = 1.5 / (3 + 3 * RND): VLX(T, A) = T * R: VLY(T, A) = VLY(T, A) + A * R: NEXT: NEXTπEND IFπIF LY(-1, -1) < 26 OR EX = 0 OR LY(1, -1) < 26 THEN GOTO 20πLOCATE 1, 1: COLOR 0: PRINT " ": LOCATE 1, 1: SLEEP 1: CLSπNEXTπLOCATE 1, 1: PRINT "YOU WON": PRINT : GOTO 3π50 DIM N$(1 TO 10): DIM S$(1 TO 10): DIM S(1 TO 10)πSCREEN 8: ON ERROR GOTO 100π51 OPEN "SDF.12" FOR INPUT ACCESS READ AS #1πFOR T = 1 TO 10: LINE INPUT #1, N$(T): LINE INPUT #1, S$(T)πS(T) = VAL(S$(T)): NEXT: CLOSE #1πIF S <= S(10) AND Y$ <> "S" AND Y$ <> "s" THEN GOTO CLπIF UCASE$(Y$) = "S" THEN 52πPP = 0: FOR T = 10 TO 1 STEP -1: IF S > S(T) THEN PP = TπNEXTπ52 CLS : PRINT "#", "NAME", , , "SCORE": PUT (88, 0), UAπFOR T = 10 TO 2 STEP -1: IF PP < T AND UCASE$(Y$) <> "S" THEN N$(T) = N$(T - 1): S(T) = S(T - 1): S$(T) = STR$(S(T))πNEXT: FOR T = 1 TO 10: LOCATE T + 1, 1: PRINT T, : IF T <> PP THEN PRINT N$(T) ELSE PRINT "   {You}"πLOCATE T + 1, 56: IF T <> PP THEN PRINT S$(T) ELSE PRINT SπNEXT: IF UCASE$(Y$) = "S" THEN GOTO 101πKILL "SDF.12"π100  IF ERR > 0 THEN PP = 1: CLOSE #1πIF S < 1 THEN BH = 10: GOTO CLπIF PP < 1 THEN GOTO CLπPRINT : PRINT "S ="; S: GOSUB DEPπINPUT "NAME? ", N$(PP): IF LEN(N$(PP)) > 40 THEN N$(PP) = LEFT$(N$(PP), 40)πS(PP) = S: S$(PP) = STR$(S)πOPEN "SDF.12" FOR OUTPUT ACCESS WRITE AS #1πFOR T = 1 TO 10: PRINT #1, N$(T): PRINT #1, S$(T): NEXTπGOSUB DEP: FOR T = 1 TO 15000 * M: NEXTπCL: CLOSE #1π101 IF Y$ = "S" OR Y$ = "s" THENπPRINT : INPUT "ELIMINATE CURRENT LIST (YES/DEFAULT = NO)?", Y$πIF UCASE$(Y$) = "YES" THEN KILL "SDF.12": BH = 10: OPEN "SDF.12" FOR OUTPUT ACCESS WRITE AS #1: FOR T = 10 TO 100 * RND + 20: PRINT #1, "@"; : NEXT: CLOSE #1πEND IFπGOTO 7π200 RETURNπ210 IF TFK > TIMER THEN KM = 1 ELSE KM = 0πLINE (OXP - 8, OYP + 8)-(OXP + 7, OYP + 8), 0πIF KM = 1 THEN I$ = INKEY$: I$ = "": KM = 0: LINE (XP - 8, YP + 8)-(XP + 7, YP + 8), 7: OXP = XP: OYP = YPπRETURNπ220 IF BZ = 5 THEN RETURNπIF Q = 0 OR ZB > TIMER THEN INJ = -1: RETURNπIF TB < TIMER THEN TB = TIMER + 3 + INJ / 2: INJ = -INJπRETURNπ230  IF F = 1 OR C > 14 THEN RETURNπDD = (X - FX) * VFX * 2 + (Y - FY) * VFY * 1.25 ^ 2 * 2 + .001πRUF = ((X - FX) ^ 2 + (Y - FY) ^ 2 * 1.25 ^ 2) ^ .5 + .001πRF = 42 * (DD) ^ 2 ^ .5 / RUF * MπLINE ((FX + VFX) * 8 - 4, (FY + VFY) * 8 - 4)-((FX - VFX) * 8 - 4, (FY - VFY) * 8 - 4), 0πVFX = VFX + (X - FX) / RF: VFY = VFY + (Y - FY) / RF / 1.25πRF = (VFX ^ 2 + (VFY ^ 2 * 1.25 ^ 2)) ^ .5: VFX = VFX * .5 / RF: VFY = VFY * .5 / RFπC = C - PS * .2πLINE ((FX + VFX) * 8 - 4, (FY + VFY) * 8 - 4)-((FX - VFX) * 8 - 4, (FY - VFY) * 8 - 4), 4πRETURNπ240 IF F = 1 OR EEP = 1 OR C > 14 THEN RETURNπIF FX < 1 THEN EX = 0: EY = FY * 8 - 1: EEP = 1πIF FX > 40 THEN EX = 319: EY = FY * 8 - 1: EEP = 1πIF FY < 1 THEN EY = 0: EX = FX * 8 - 1: EEP = 1πIF FY > 25 THEN EY = 199: EX = FX * 8 - 1: EEP = 1πIF EEP = 0 THEN RETURNπIF EX < 0 THEN EX = 0πIF EX > 319 THEN EX = 319πIF EY < 0 THEN EY = 0πIF EY > 199 THEN EY = 199πCIRCLE (EX, EY), 69, 4: PAINT (EX, EY), 4, 4: GOSUB TBASE: PAINT (EX, EY), 0, 0: CIRCLE (EX, EY), 69, 0πIF (X * 8 - 4 - EX) ^ 2 + (Y * 8 - 4 - EY) ^ 2 * 1.25 ^ 2 < 70 ^ 2 THEN H = H - 1πRETURNπ250 IF EEP = 1 THEN RETURNπEEP = 1: PLZ = PLZ + 1: IF PLZ < 6 THEN RETURNπPLZ = 0: LINE (BX * 8 - 8, BY * 8 - 8)-(BX * 8, BY * 8), 0, BFπBX = 2 + RND * 36: BY = 2 + RND * 21: RETURNππJacques Mallah                 COMBAT GAME                    pages.nyu.edu/~jqm1584/        03-06-96 (09:55)       QB, QBasic, PDS        160  7993     COMBAT.BAS  DECLARE SUB PRNTM (MX!, MY!) : 'CB2.BAS by Jacques MallahπDECLARE SUB MAPMAK () : DECLARE FUNCTION D (N, T, P) : RANDOMIZE TIMERπMXMN = 10: DIM MAP(1 TO 80, 1 TO 23): X = D(1, 80, 0): Y = D(1, 23, 0)πX = 1: Y = 13: '                Kill 10 monsters to winπDIM MLX(-1 TO 14), MLY(-1 TO 14): FOR TE = 1 TO 75πMAP(D(1, 80, 0), D(1, 23, 0)) = 11: NEXTπFOR M = 1 TO 80: MAP(M, 10) = 13: MAP(M, 15) = 13: NEXTπFOR M = 1 TO 10: MAP(26, M) = 13: NEXTπFOR M = 15 TO 23: MAP(26, M) = 13: MAP(55, M) = 13: NEXTπMAP(13, 10) = 11: MAP(14, 10) = 11: MAP(13, 15) = 11: MAP(14, 15) = 11πMAP(40, 10) = 11: MAP(41, 10) = 11: MAP(40, 15) = 11: MAP(41, 15) = 11πMAP(66, 10) = 11: MAP(67, 10) = 11: MAP(66, 15) = 11: MAP(67, 15) = 11πMAP(X, Y) = -1: FOR M = 1 TO MXMNπMP: MX = D(1, 80, 0): MY = D(1, 23, 0): IF MAP(MX, MY) <> 0 THEN GOTO MPπMAP(MX, MY) = M: MLX(M) = MX: MLY(M) = MY: NEXTπHPT1 = 25: THAC01 = 13: AC1 = 1: ATT1 = 1: DDN1 = 1: DDT1 = 8: DDP1 = 1πST1 = 7: HP1 = HPT1: ITEM$(1) = "(P)OTION OF EXTRA HEALING": ITN(1) = 2πITEM$(2) = "(G)RENADE": ITN(2) = 1πITEM$(3) = "(S)TRENGTH POTION": ITN(3) = 1πITEM$(4) = "(C)ALTROP DETECTION POTION": ITN(4) = 1πITEM$(5) = "(A)DDED TOTAL HP POTION": ITN(5) = 0: IT1 = 5π1 : MAPMAK: CLS : RN = 0: IF MN = 12 GOTO 24πRESTORE: FOR M = 1 TO MNπREAD N2$, HD2, HDP2, THAC02, AC2, ATT2, DDN2, DDT2, DDP2, ST2, SP$, TR: NEXTπIF OHPT2(MN) = 0 THEN HPT2 = D(HD2, 8, HDP2): HP2 = HPT2: OHPT2(MN) = HP2 ELSE HP2 = HP2(MN): HPT2 = OHPT2(MN)π10 RN = RN + 1: PRINT : PRINT "Round "; RN: PRINT "1:FIGHTER", "HP1="; HP1; "/"; HPT1πPRINT "2:"; N2$: ', "HP2="; HP2; "/"; HPT2π11 PRINT "#1 ACTION:(R)UN,(I)TEM,(SPACE OR ENTER)=FIGHT"π12 I$ = UCASE$(INPUT$(1))πIF I$ <> " " AND I$ <> "R" AND I$ <> "I" AND I$ <> CHR$(13) THEN 12πIF I$ = "I" THEN GOSUB ITEM: IF IT$ = "" THEN 11πI1 = D(1, 6, 0): I2 = D(1, 6, 0): I = 0πIF I1 > I2 THEN I = 1: PRINT "1 HAS INIT.": GOSUB A1: IF I$ = "R" GOTO 23πIF I1 > I2 AND HP2 > .1 THEN GOSUB A2πIF HP1 < 1 GOTO 21πIF HP2 < 1 GOTO 22πIF I2 > I1 THEN I = 2: PRINT "2 HAS INIT.": GOSUB A2: IF HP1 > .1 THEN GOSUB A1: IF I$ = "R" GOTO 23πIF HP1 < 1 GOTO 21πIF HP2 < 1 GOTO 22πIF I = 0 THEN PRINT "SIMULTANEOUS INIT.": GOSUB A1: IF I$ = "R" GOTO 23πIF I = 0 THEN GOSUB A2πIF HP1 < 1 AND HP2 < 1 GOTO 20πIF HP1 < 1 GOTO 21πIF HP2 < 1 GOTO 22πGOTO 10π20 PRINT "BOTH 1 AND 2 ARE DEAD": PRINT : PRINT "SCORE:"; S: PRINT : ENDπ21 PRINT "HP2="; HP2; "/"; HPT2, , "1 IS DEAD": PRINT : PRINT "SCORE:"; S: PRINT : ENDπ22 PRINT "HP1="; HP1; "/"; HPT1, , "2 IS DEAD": SPB = 0: MNK = MNK + 1: S = S + 20 + 10 * HD2π23 IF TR > 0 AND I$ <> "R" THEN PRINT "U FIND A "; ITEM$(TR): ITN(TR) = ITN(TR) + 1πIF MNK = MXMN THEN PRINT : PRINT "U WIN": PRINT "SCORE:"; S + HP1 * 2 + 30: PRINT : ENDπ25 PRINT "#1 ACTION:(I)TEM,OTHER=CONTINUE": I$ = UCASE$(INPUT$(1))πIF I$ <> "I" THEN 1π24 GOSUB ITEM: IF IT$ = "" THEN 1πIF IT$ = "P" THEN PRINT "1 USES "; ITEM$(1): HP1 = HP1 + D(3, 8, 3): S = S - 20: IF HP1 > HPT1 THEN HP1 = HPT1πIF IT$ = "G" THEN PRINT "1 WASTES "; ITEM$(2): S = S - 50πIF IT$ = "S" THEN PRINT "1 WASTES "; ITEM$(3): S = S - 50πIF IT$ = "C" THEN PRINT "1 USES "; ITEM$(4): CLDT = 1: CLT = TIMER: S = S - 20πIF IT$ = "A" THEN PRINT "1 USES "; ITEM$(5): HPT1 = HPT1 + D(1, 6, 0)πPRINT "HP1="; HP1; "/"; HPT1: PRINT : GOTO 25πA1: IF I$ = "R" THEN PRINT "#1 HAS FLOWN LIKE A CHICKEN.": X = OX: Y = OY: HP2(MN) = HP2: GOTO 31πIF I$ = "I" GOTO 31πH = D(1, 20, AC2): IF H - AC2 = 20 THEN H = H + 5πIF H - AC2 = 1 THEN H = 0πIF H >= THAC01 THENπDAM = D(DDN1, DDT1, DDP1 + SPB): IF SP$ = "1/2" THEN DAM = CINT(DAM / 2)πHP2 = HP2 - DAM: PRINT "1'S ATT HIT"πEND IFπ31 IF I$ = "I" THENπIF IT$ = "P" THEN PRINT "1 USES "; ITEM$(1): S = S - 20: HP1 = HP1 + D(3, 8, 3): IF HP1 > HPT1 THEN HP1 = HPT1πIF IT$ = "G" THEN PRINT "1 USES "; ITEM$(2): HP2 = HP2 - D(3, 6, 0): S = S - 20πIF IT$ = "S" THEN PRINT "1 USES "; ITEM$(3): SPB = 6: S = S - 20πIF IT$ = "C" THEN PRINT "1 WASTES "; ITEM$(4): S = S - 50πIF IT$ = "A" THEN PRINT "1 USES "; ITEM$(5): HPT1 = HPT1 + D(1, 6, 0)πEND IFπRETURNπA2: H = D(1, 20, AC1): IF H - AC1 = 20 THEN H = H + 5πIF H - AC1 = 1 THEN H = 0πIF H >= THAC02 THENπHP1 = HP1 - D(DDN2, DDT2, DDP2): PRINT "2'S ATT HIT"πIF SP$ = "POI" AND D(1, 20, 0) < ST1 THEN PRINT "1 IS POISONED!": HP1 = -10πIF SP$ = "REG" THEN HP2 = HP2 + 3: IF HP2 > HPT2 THEN HP2 = HPT2πEND IFπRETURNπ'N2$, HD2, HDP2, THAC02,AC2, ATT2, DDN2, DDT2, DDP2, ST2, SP$,TRπDATA OGRE,4,1,12,3,1,1,10,0,11,,1πDATA HOBGOBLIN,1,1,14,5,1,1,8,0,11,,3πDATA SKELETON,1,0,15,5,1,1,8,0,11,1/2,2πDATA HUGE SPIDER,2,2,14,5,1,1,6,0,11,POI,3πDATA SKELETON,1,0,15,5,1,1,8,0,11,1/2,5πDATA RAT,0,1,16,7,1,0,0,1,11,,4πDATA HUGE SPIDER,2,2,14,5,1,1,6,0,11,POI,2πDATA RAT,0,1,16,7,1,0,0,1,11,,2πDATA RAT,0,1,16,7,1,0,0,1,11,,1πDATA TROLL,6,3,11,4,1,2,8,0,11,REG,2πITEM: PRINT "1 HAS THESE ITEMS:"πFOR II = 1 TO IT1: IF ITN(II) > 0 THEN PRINT ITEM$(II); " x"; ITN(II)πNEXT: PRINT "OTHER:DON'T USE ITEM": IT$ = UCASE$(INPUT$(1))πIF IT$ = "P" THEN IF ITN(1) > 0 THEN ITN(1) = ITN(1) - 1 ELSE IT$ = ""πIF IT$ = "G" THEN IF ITN(2) > 0 THEN ITN(2) = ITN(2) - 1 ELSE IT$ = ""πIF IT$ = "S" THEN IF ITN(3) > 0 THEN ITN(3) = ITN(3) - 1 ELSE IT$ = ""πIF IT$ = "C" THEN IF ITN(4) > 0 THEN ITN(4) = ITN(4) - 1 ELSE IT$ = ""πIF IT$ = "A" THEN IF ITN(5) > 0 THEN ITN(5) = ITN(5) - 1 ELSE IT$ = ""πIF IT$ <> "P" AND IT$ <> "S" AND IT$ <> "G" AND IT$ <> "C" AND IT$ <> "A" THEN IT$ = ""πRETURNππFUNCTION D (N, T, P)πFOR C = 1 TO N: S = S + INT(RND * T + 1): NEXTπD = S + PπEND FUNCTIONππSUB MAPMAKπSHARED MAP(), X, Y, MN, OX, OY, HP1, HPT1, CLDT, CLT, S, MLX(), MLY(), MXMNπSM: CLS : MN = 0: MAP(X, Y) = -1: FOR MX = 1 TO 80: FOR MY = 1 TO 23: IF MAP(MX, MY) = 0 GOTO STMπIF CLDT = 1 AND MAP(MX, MY) = 11 THEN LOCATE MY, MX: PRINT "."; : GOTO STMπIF MAP(MX, MY) = 13 THEN LOCATE MY, MX: PRINT "["; : GOTO STMπIF MAP(MX, MY) > 0 AND MAP(MX, MY) < 11 THEN PRNTM MX, MY: GOTO STMπIF MAP(MX, MY) < 0 THEN LOCATE MY, MX: PRINT "U";πSTM: NEXT: NEXT: MC = 1πLP: I$ = UCASE$(RIGHT$(INKEY$, 1))πIF CLDT = 1 AND TIMER - 50 > CLT THEN CLDT = 0: GOTO SMπLOCATE 24, 1: PRINT "HP1 / HPT1 ="; HP1; "/"; HPT1; , "(I)TEM; MOVE:CRSR";πLOCATE 24, 60: PRINT "SCORE:"; S; : TIM = TIMERπIF TIM <> OTIM AND I$ = "" THENπXS = MLX(MC): YS = MLY(MC): MC = MC + 1: IF MC > MXMN THEN MC = 1πXS2 = XS: YS2 = YS: IF X > XS THEN XS2 = XS + 1πIF Y > YS THEN YS2 = YS + 1πIF X < XS THEN XS2 = XS - 1πIF Y < YS THEN YS2 = YS - 1πIF MAP(XS2, YS2) < 11 THENπLOCATE YS, XS: PRINT " "; : LOCATE YS2, XS2: PRINT " ";πMLX(MAP(XS, YS)) = XS2: MLY(MAP(XS, YS)) = YS2πMAP(X, Y) = 0: MM = MAP(XS2, YS2): MAP(XS2, YS2) = MAP(XS, YS): MAP(XS, YS) = MMπIF MAP(X, Y) = 0 THEN MAP(X, Y) = -1πIF MAP(XS, YS) > 0 THEN PRNTM XS, YS: OX1 = XS: OY1 = YSπIF MAP(XS2, YS2) > 0 THEN PRNTM XS2, YS2: OX1 = XS: OY1 = YSπIF MAP(XS, YS) = -1 THEN LOCATE YS, XS: PRINT "U";πIF MAP(XS2, YS2) = -1 THEN LOCATE YS2, XS2: PRINT "U";πIF MAP(X, Y) > 0 THEN I$ = " ": OOO = 1πEND IFπEND IFπOTIM = TIM: IF I$ = "" THEN GOTO LPπLOCATE Y, X: PRINT " "; : OX = X: OY = YπIF I$ = "H" AND Y > 1 THEN MAP(X, Y) = 0: Y = Y - 1πIF I$ = "P" AND Y < 23 THEN MAP(X, Y) = 0: Y = Y + 1πIF I$ = "K" AND X > 1 THEN MAP(X, Y) = 0: X = X - 1πIF I$ = "M" AND X < 80 THEN MAP(X, Y) = 0: X = X + 1πIF I$ = "I" THEN MN = 12πIF MAP(X, Y) <= 0 THEN MAP(X, Y) = -1: LOCATE Y, X: PRINT "U";πIF MN = 11 THEN LOCATE 25, 1: PRINT "                         "; : MN = 0πIF MN < 12 THEN IF MAP(X, Y) > 0 THEN MN = MAP(X, Y) ELSE GOTO LPπIF MN = 11 THEN LOCATE 25, 1: PRINT "U STEPPED ON TETSU-BISHI."; : HP1 = HP1 - 1: MAP(X, Y) = -1: LOCATE Y, X: PRINT "U"; : IF HP1 > .1 THEN GOTO LP ELSE LOCATE 25, 40: PRINT "1 IS DEAD!"; : ENDπIF MN = 13 THEN X = OX: Y = OY: MN = 0: LOCATE Y, X: PRINT "U"; : GOTO LPπIF OOO = 1 THEN OOO = 0: OX = OX1: OY = OY1πEND SUBππSUB PRNTM (MX, MY)πSHARED X, YπIF (X - MX) ^ 2 + (Y - MY) ^ 2 < 26 THEN LOCATE MY, MX: PRINT "M"πEND SUBππMike Hulme & Co.               SPHERE FIGHTER                 aa521@freenet.toronto.on.ca    03-08-96 (08:33)       QB, QBasic, PDS        308  20109    SPHRFITE.BAS'[--------------- PRODUCT OF >>>>>>> MAVERICK PROGRAMMING ---------------]π' [.................... Sphere Fighter, Version 1.7 ....................]π'     [............... *NOT RECOMMENDED FOR WINDOWS* ...............]π'                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~π' Requirements:π'  1. 10k free memory (WOW, that's a lot!) ***SEE <FILE NOTES>  ***π'  2. VGA or MCGA adapter (SCREEN 13)π'  3. Mouse (one button only)π'  4. uses Sound Card for SFX and MUSIC!!π'  5. 386 PC or higher recommendedπ'     a. To adjust Computer's speed, use > (slow game down), or < (faster)π'  6. *WARNING*  This program pushes computer memory to the limit...ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SPFIGHT.ZIP",4^6:Z&=14325:?STRING$(50,177);πU"%up()%9%%%.-%Gf/7Esz7>[=Xd%%vc%%%1%%%%xu%mwkn%yjSgRfxfLq*FSAZKaπU"TH<i)w&Z$&F]RL]?]9M7PndW0S)8h=i+tkQrGb4BETWe/]\miSX<QwfvzW3*ce.πU")]bq?G7QXU&x4yr3y33<s%Vacx(Hv)^k4,0f06qR+BkUix$-l8l$e_S>Fh3uQenπU"3fv8a;?tX4$6HBNBl$u$Jr<l8mLn6EJ=<rD7bH$T<b()E_;#d]F7ENqp\bHTs\RπU"V>3WGoPB<t<0rC_RFH?Xf0,]hlTK$-1WRr8N%xg(spxlpN;b6XtZM\;E:l;gg?lπU"YA,mL>AhX,lD(sq>Mi7iAq$TIdC7^EVR7hOW5Gj1?]3]z;vJ_7H?%$IFhwLs.G:πU"Iq*WlYnB)IbV_LJxhOFkfsg]AU'KTLuD;O/OVfb*zIjL>/Z,bdz9%*07Qi_.H/JπU"Lq'5Rmk:9dVJ]0)ka#k>AM2IRCpa,t[3GWLCQe^JXzz_nB,C5tjVW*<KewI316qπU"rEvxy_8Fq?&P2$>z#UGs?Qx)1;:Vx;,NXneo4YkU9W<Hih<UIpc/h+n<d,JoreYπU"9>5e_fBOsO#]>ut_)X<fn5E)3K\0cB<W1q,Ip]80:WVeuLQ3EM19_caGLl-RvQ_πU".cc5yMO_5(G_Y)Zn7>E<s+b(go(>s2p\LR8Wa$,P*le1_mBSCrFjX^4D39^DcwtπU"jhVkk2lljD0pW]CEoGy]JxYB=0,B$RpptH?K709abhY]G3<2&v2X._:m$[cB3W9πU",I0dqEV]v,l8%P#EpUL?+i8ipE?ii75QujUiY:aeK2%H3$BAd70h'hE[k[V#LSHπU"1Ad]*^uE6^&:tu,UBk;8nY+tJ6qn4UiI;:aq8FB%GIwTbV0R<NS(Nl\T7keaAPyπU"cPvk,m4cgJsMZ>xgA&]'<x%p2w]UY9arZOzAzXb?Wkw$Uni,o>Rb&6;Rsi,q(4cπU"^V^Q-NBJm5cYDGY9hAtGHmBb)lreUE%GW0nJG<K-Tu/hZjE[5p6JxIB5GDxYk[GπU";g_bM5rB9*Lst(R6p*J^>IG[4t[W#1nOfE;0-/+fZK(\[km2K>AlH1SOc2+N\ibπU"i9AX#fxT)1,k62rbb8mS=f]y)0sVZ8=;7d+z1>,c]SLP1&2No;=e:b(.pZVQatVπU"WeGFhGbewI;J5&3oXqID;76X^(iDnKG8]qvA=-o9>S$n)W35(;A,3cjC<\pLbpVπU"^TFjVrT)Il/^(JUH,LnR*2x4oGl7?j_pfd=6bUfH;zA4L:Q\QT9jQsG5>eiWZ5:πU"Sqiu7C'm_kLQLN$XNZW.sK]T,6b[Hi2=KNs6_,^cMXe.Pe)9_HH:kHPu3jAF/9cπU"6gCrLYqTR2rK:\jUn$j1Dx0R0PP8m>G='qPUe9hHkl_q(Ypp*&a2LMHgJG.vJa8πU"5a66Gcsu6Z]ufVBg^p4i>HZ(EYUdJ\ZM)O(gNVJBpcfNiN4k'K_xw&:K-]X25TCπU"T8-5#(<joFWbO2\r4m'RT8Mm5J_I=K:V9Xc=U\JxF+4w)4#Lfief7\6iCpNoQdtπU"cGhe_]FD8(=VX.ndH8'M\hC05R$Ul9wPUd)PwiB(F.oRvJ%kX[#gW.9erQ>VtW'πU"]t3hhbe*ECnLcmhH6^lNWskUJ/N(n6(Qp9I=,nf1fSS%<K.DP<7VVuJd/]*UKkKπU"ICpiIV07S^6]cd2JKR(RwDE^VmvF)60EezJA7s1'$wLbJAVH<:U0l_qGqN'B9isπU"rJ_B3<#G1Lb?JO9G9u'ZS<$(&C,7Z1l>0e-Kb3lrY]X4uHHGAW1HoeLY*RZjVb]πU"B?qMfD-#/'BQjQ^ec,i-V=:q45CZ'GFtz4Xo$QN.)nDqWtfln?hZDWc54:&ecOMπU">iaV%BMDPO=;#SJqA8ri(Q=NP/TEB%2he(fS:l&50I[j0pM\Tx6K+Fe<4%30FoDπU"Z0PemM$J.0]TcKFuo4'\X[1ld&\/ocmc;cb\DT6cG[ugk?:>BN(>,2TuGpoo?AtπU"LfL8\;FGvf_6*Fppk7<RK.SoTkmYdA^MVX+*NG0]d+MY>GFj+ernrjEC7:kFWYQπU"q5NoTL]p%dFNmp.k,sfEM[vzihNX924b1/;6CvSegrKmNb'KZrvBQ8co,9]<RoRπU"C3.Is]F?mtmhtZ74,6FPws1(T\'6q6H8NVfS\='wuU)Tfdn/5ppPd8gK>4H:I9kπU"cr^n'vi9nHk%-W-rO7.a]6'D4Sb6?%91TgP;:]uwn;f^$=;&WPKdqtGZnv6Fu(.πU"MJz8)(.k]%(b3yUT3C%qEl/>$=G-RbCE#83uRgo4o\A/V,#0d?I4TI=&NQjSXfHπU"*.mamJYN5EP\Y(EdA+*61%nvM05o>RFa7'l0hke^b[&t.[,CDf9m;7ibSP[u7e;πU"86bt/6vgF6w:.+RsUH$s75gY0_KR6.gkgx$;ldrI=SusNQ;nDq*8?w<3irv%;0iπU"[gX4ksrWck;Oxi_bT#:ClS2PWv\Bqt.V_/cF6[Z/?>x2m<8-+$Wng,Dg)1eH)cOπU"INmkq2DP5-GotgOI.9LTOvg?9Lmp&)l-b]30cd^jCSscG1$aNlK/04d8ovT]jY'πU"cG'>rgFKK2e6D.h/pEg+.W?rxbUKKV7j]nG528Guj7HukLqd6:W8g:-U)$H'(IsπU"^G?VwQb)#VJ7>-H6UqY5pw&-?CArJhTPT9FfKOUCs#-x=wlA,eob[/<xY^RgiiaπU"*G(3b(?1<:]2aJD7n(6<UK$OGsLy?6SP9_Y>.[JXhpU<h]DeUXV\u3DKisDpsjvπU"7PJ/p_lJQDHlS<ZW1MtzYqoBSfi2*PgY%DB,rDnH0^%ESsq>*FJ1[IrcnKVg/<9πU"l4h$$1Yc43s*%PpEbZcg1^UP%kDN\dHj4oTpEK2sy0Oe>yJ,Wi\\q=v+01#vU>RπU"8[,=O^69=;kImcQP_M381xk[w)lIN]<SGWr0_qNVg^UwP+Aa1+%:=nJn>P<[g=#πU"<$heq0Qpg]1[BluY[+W#uq//#&:q]pQ;g[[yY8Y#>_G,n(a#E.1=drrB8Lm:DwBπU"=K:^eOF5x+4,.1#dh2v>dY-yVkVN1hAf^[IIM]Y$k#[r%-=UR=u9T._G**x^a*QπU"u/43Q025=rR'3ya'f;WgHHBF7u$7NVBdpW,^bePnIX$dI8a3Wn;r$XC$ZcZ:..CπU"r%vO3GJUjx?qWsxw=dm-LMJ[BsoZ6jOV^cYVWqQ5ApA1.2g7t8XX[g,JC5TTw5oπU"O[[z8'6z]FuH^eu.F-6]^ZI^nlg6*x_tSKW?ffK4H<RLNQ:7-YK.]+\'qrT[_gjπU"Jqn3*ot6HYRcG2Eto8J4BT83&L#O2>J%+YD,Ilvp+%pH9)Qm4dD;1s&F_mrTHEdπU"xYjNM+oK'HLU%kGQ&d]9'5_Z(>l\BWp(*+:r:Z^q.IvT59j$TFV:7BMFnpgoYlDπU"NBVBgU/=8c-_^veF%^BcP37:m:408k;TAFDQ\0XF6P=t($2f(1iFo=a/$Iv1*NhπU"-](=/\7^h=aA2Lyzf+HoROdrVaZ9ARvRd:2hKy%xI;p3(0IlnQzY:q3/e./%W,eπU"b#SJDCOdRP&d9vl/QZt-7q6(ZYKfa'[:m)s<faL)s=<QV76hK2kNHJ)/7+M*=l.πU"4$;K?46MTR[?i>Ug4g$A+81&tXPpj7nJ,92ERq'CRVb#Gk4O$B/FphX,a8'71.qπU"eQFUFjZ=X^5\vs_,[3GI+h1eV$4KOu>f_Q:J56i'E+^D5Et2wI]8:=Xr2_EMKK+πU"7e78OV(BPn2R:8]jYHlRNj(3R>5BU'\K4$HoG79%X-5HGW14Q^FK22Q8a./Lq59πU"^l<p7>7mQ6b&A12yg+#0dKGK?uO%g,)15A#&ihu)F,,bG+J$\)2V8K;W#U,u-nVπU"5$V'R]1Cr1XyYhof^:k3HJ-qrIw[<rq9E%3>8RFOjZcET4QTUvc.Tk6V(z/yYe>πU">TD<dU)FWWhs^h$sDmYrCiD<b62J^Zb%;j56k3f]:Xm_:TblMe96V4)FQ9)S7i9πU"0/vND.FkA.;L6U1?U0Ugqr11YEF)zgrR$,S'?t&N*;r5Cz:RRBO)^10:OuR(;[uπU"Pq[kFB%z2Hl4ooxm_8&$&COD/WP&_GcT*fV][r>Wfl)k82jnR&R6%R4E9a=.WDbπU"YwR'\z9a>v&Yz:*->S(#Ol*;-Z\zC^m*y[XOqWVAtOx3Mg[rfDW7DHaQRUWPAe)πU"PzK;(baH?#',>C-Cz6UDEPyV0Pi/,pJ]j<VSt^/(VBy.e=Rjc'iHocZd-aj\RZ2πU"C?^)mFi89AHYg9TiF6+bOg<dDLU5iNAB$cnPMqpDoV/yw*E2iq12)RQ^='/vV_YπU"%F)oLab)<2b&;#=O/LW^IvKVLyTU-2T7wu1:qd^spX<F2g33>l7=U9q*)0<JVD>πU"WePpq4C$A^v-iYTL,z)uorH]9M)?&*Q+RmnZW,d;jA3qM[f_xeF:Mx,j1*/A\l4πU"p(/JkH9(6PwK3>HCMuuB82oFgYVh(5y*T95JIz_uPog6nf9;Z*UMk43^R*3sJpJπU"omS1IG%a2Ju&aQ%ALW'IM=i]0m[2t=dU$UB:c*i/rH<rbo9hrU4Mx)m)WKW(ZT:πU"eBQuX$nJNwY%L[4[2h9*5#EINkY,%/:-koev4l_lJYVp;2]e)],F<hL,uCGT3'CπU"qx*d%TcBYUdwp&dllAxrwM/i_04a'AIl6ts\g.?H#_$2)/lA?Sovo4Sm=-2'I&yπU"S.ples%e<9WGjeD3(v-T(&ZJe+azA3e<opA'4qq1.)c*<5s^P7IHia.N_fnG<PTπU"5iB3A<b6\8p)qUyz^l#^eur6?991?%?X]L_?3zcYI)W$JN,2r&P>=%AUgMRZP.eπU",sALK/Lx7Er/tlWe/UC:;e)Y\FoUde6IDcUqxoTKCGW[(LwC;MpWQkU^U>Kw1v/πU".DF*^n/8JlPl#\f^l9[Brl:-6*y/J7'GQn?fn^N6h$Fkf+Op':kddL?gjg$lsS<πU"$^^Ft%Qaf0N$F]ggd\?BQ&mtYD9tA?NjJ:)w<6Q1vDJnixSb&Fx0D>luA)AX#c:πU"OY'etqp8&BIR9>UdpYBBYa3k)s$1To:IovWt$DpU<5<64eh^FFU2MjC$04$A*d;πU"iIeEXBcEaBs47F<v+#1r.0''(RI%]:+>/K05U8m_(<j3l:gk3Z3wb\_x1U(>75^πU"?lQ?=n8T6H^AXv2E84Y\d+SE9ZLgG(Q0haq#f3F\DLiJ1%AA:rE,+Gd8R7*p5sNπU"85L35hDPA=$^#IIZ;[*WKA1X#4*IWriqH<l8Q^O'a(+W\>:gH=%\PHJ??EJ><MsπU"J<ogO3g2e-Dj1obVee=6HW-f<9(??31'01rkada#7Yi<V:F#Sk\e>uPJW:E]:-,πU"$[WorR)&La:V[HY#Xm)/[o*%5Bp1jvotoPvY;a#0,?DEV3>Hx)UMbuGMmVK>pD5πU"Xy#el1EeoGlg1':C>5]t]I^#+&YbK5&#^Cm\Uyciw/W44>J0)<T8:#jI[SV.V=sπU"E+AjX.lj-g0.i9u'.+\%\3/;V<C1.y1WTBoWUY\q1Um-8J)NB]+Y:Cxb]]xc;TuπU"ng)t-7;TW(IJ<IRI0(a)+M4LJ\mYJ>K1Wv7cpW*I1EbC^uB1Y,zAAx#XzX#C>p'πU"]:mHgYrWoAggIZgmyd?*^tD:4f39>_)3^D5.VQJ51B.qTAumjD$Qh4eG:u9:/sdπU"pGs+miLFudh7VPiIU('g2MnVS*R;a8H7rO]-_%J^sElG6f7T=HKpD0K82gaxdJhπU"rL[FH;:/GAfr/(r2Y=h]ja5oJEGvj(Q*0[dS3tP<kQcI4U$u17P\+9'UpE+QeZlπU"maiIV+B)_J_^&V/TEpkYOyDk*=*;[]Gf5&2+S5w+5<O[1VG\16CH&rxR-'5[g\sπU";a;4%+ih;]q0rB[$3'lFCZtiF$1OCx$V95A<G/:k&;l'6QeIaL*u/t(g>)Oy3eIπU"X%o,lR>^U+XP>8;vxcGsP;tLi_gK_+7qnETeYq\-v:O=%h\>A3?_y3A-Zttk$?yπU"^g3ty5S&qFNGg;>D<3f>pPI9O<FHf$*>X\;:Y>2Y<C?Uf-*aj=2<;f(#?)ax?9vπU"6s9%CmFi&xXvUu_/l7)Lk6L)ePThL-rPU^i47kS#.VvqD;S9&Z&p/H$]-1D#X7(πU"g)>&)>wXf<&^ST4F=8K[Cf7>A+uGGH*mQu(J)1)2eT.-5bQ-(6\X8SUB^Ja-1K9πU"2].j/y%M=?H.?O8uk'*RK[Ri8(z1e,-GKSEeRM4O7IBF]/>a7f7dqiB>]ALJ#)[πU"pRhd=YCbSiog1\+vs'GHT7N)+1aCq+0N-r+BN.HaDLu]JN9&5US&#ddlW#18\.&πU"7J;gm2FQqH:;pe'*[Px0&#Dw0E8u;Erj/I)tiHyakPn;$%Cd4gmnF+<pIr=AvV9πU"W4PYAOLx(BCwx84f+'*ZzUa/fi-6,9NCl0^Uuwe4yGuNvI^tMC7>o%8bGjQar._πU"$CPya%H+Ho^BhkO9^fp$se40CQ;dhqjK5s#$k_Fe\Sbc6SZF-$J[A3DIy\vbKK&πU"dp=vSJK]WV[/K=p-Q>.MYxLg=;2ILds\qhhR=>nMAY2buSaDVbGj^a]A)q1T.=TπU")>*:6+,;^S>DT(W;o65e5rV#KtefXYElVlZ^0ob>VTsnQq_2umIR&-5NpX)JR(:πU"L%hqx1a&1.,'P+^>/[,S?g7Yu9&7+sBVPEt>$Vzy5??lp536Q2tSWoPUMkTB'_wπU"JMe0g5';-[F)g*;Z*asNMWT:POmZ1KS(GaZM&%6$Yq1s]4:Yqk+m#fVX(o8:wqwπU"IEUY[BXT0^UJ<=c1^J>/:2Lm.9,AfB_v1Aq(zpFL7bnw#SD+)m'Evq+o<^IsEjxπU"/bFTgTcb]Bq3Vc+Hp_)CSNhysyn7y#AC1cU;2UYfLiFY$FY*M7L(7t^gYH8:#:TπU"wN^M?Dskj,9YN$u&1DG>EFX\WKpbpb]SXau\Hh]ajd5KTNrx/W6'bIP8vwIT*xnπU"qEpa>,87+sx#PnD$9wm?[iOgd&jV&g1*KMslZ%n<Yp27v)reU0pH;2Gj8^9rLsrπU"M,l6m&AdM=emeN4M_4[yDb-2c$jWe?pJX#r/qkK3[Twg#x8<$spsO4rab+AkX%,πU"-4u(K:0y'\[s;y9ifbTF_BTl2$9bD^s'FMK<sna(H,ol0g)o]$AcFE=ueRd3,J5πU"NEkr4e3pg7_'15yjStuQ3:]C%0'C=xbRter\O+)NfdRZYW2JZ]7w(8X(c5b#\#'πU"TsQ'F\J[[Gn01j*x(\N22uPp.FS9u#CBpS*GRe%:zzU')0RWCnmLmDIU_^8]>OHπU"(d]qE7rM%otus1ZP=\r_hB84(KBqaIT(<Ti5)sd\2J9PJ3bLUIdIxnZA/1Yu[U_πU"BVB_1X;:Lc?si]e#Kt1tYo1J[.5Rh_k*CdDN.2-Pc0P++r7S2%htU]_.YYA\8E7πU"O?<p;(#e&FEJS$3]*L&:\vT->NWd_zLq]8/[4wk=p8&qO8zpa)?9xRZbG<,7R7>πU"peIA3Cq.TvE$cBUps(?-:]S6)#S$FD]UBVV2Q7f&jRaI4$[>;^g3&kbcBGk4]<0πU"m<N0H=N)?b1s]2i(RCBPvYBXfU*nvUt?>Z[]]&Pu7Y%l]SL\w>6AZLTcpcP_Gs%πU":+8)T7?;ZU^(AULi08]UuB11fUL=f\LA[US#*e?+lt23=4LLz_niPgTut;8Yj*vπU",ec:SQH5W(GhL/4A\_s;$gG-t]LLQ,6_K6o$B+i_$72rkXN_]k/gjJ<]D'Ntz&/πU"SQ23'Q[ZH-$iK+*cH4$jfZpGBle*r^4m<x>]U8OtV'5vOPjtdeasDGR<JaF/^K&πU"P4^$/)Q5E(/C4Ld)V5KLYr%DCp=eC3M4KWEfRUXl'\:[):AIP\Z#S]miHCmw6RBπU"[<t#0qPJ5gt%R1]Qxu'VXGA+X:<03<Q[6gK*GVDC]?gVdF,bBXu+aPMU]pR<5qjπU"uqb5l2L/p/?RQCo:fBozL.B_6SR1lr7.YCSWIY<K'[.iuZ\7'm,;_e'G+X&FxdyπU"w*;.^VSHaPiwnprGK#aYqdg,bYE52]8c:/c)kW;G9SNC)yH/UTLJaJu#^PSIbmqπU"CkRb0^dYt9M,hnV$:Re&BDG(3LW^)&-jLJrO7r2QlJcneB#n]=>w>\Tp^?Y\6TXπU"4XY0IR0:Kcu$'=rL#f\lSknHHi+(S^.(DAPqV\sM%I37wg5FUgz3:eOeGk17[:]πU"'C(O]fM)>&'Qx'[Tb+81oRvo=o9Ji8Mln*\zjI[=-9;iCRf#sADN,z4;D;fNdx0πU"v/RPNV=Gx_p:g^IcBp[R7,a5GoFesu7OCWoi\NlB-7SfZOmUt7[KB/i%?([ZuKcπU"pz'$j?M.JR)H$4QpK%Ew9RFn^79J4:%[Y<1yWet2qjCnaJ_-=osMOQx^*tYx.CvπU"akrTT4MT=,0;cjlFRWeBIS3PJ_WM^.b9.7tl+rK3)(dqz:?GS:;U%$jm)$Yl9b)πU"*3\WUhPXV&kEcMhP,0or4[l<AZm]%9Hmn^WKbWuKZxfrR4k$2yN-de\8ZHXR)e\πU"M-^;^9/.cnfxP9k'l_C.1?6U^1;JU(\E$iX7YD&X7D%Z_DX=S7q\;vKxi8S/A3ZπU"8&4=Mx[b1;Lfr'z7DzQ>5)(q]NU99Bk\E/,K=V<FP1*Bcj^zt=Ea_BR#qq9-.0/πU"_#'\FE]:iMnadu(###uj=-QtRTmiF5MfpXiCcguX%]Ed3]xg3MVj'183]p48U9CπU"i'km0iv?E4C-BM'1.T)CF*nMBF?Ps?<dH1T6iErdLJn.a/e\nttfW$\\:TIPD.XπU"aD>-YdZ$^g9F\jG:GK6^+:&fLfJ7fZlubJwAH,,3\\'w)S+HuV0R.*^VjF3xPvdπU"vr7I[a?U%%8)-8R%Sw*V_4)1hSL__mDu2x6Y-9.7RP0soQLAjV^Ellft4A[LTqtπU"/hrmoShHw?Y2(cyu<qTuC'URm$S'qxJ4[pszsJ-C2D9PpXpY9\L+f(^',I$c=#rπU"T-eOg#518sYPmirxg8;g[GIV'KkfL6)MY)aXR_gFd:,&Q9jw]p4fAONn5bj$Hn#πU":Z^-7rdt2O1P7(Nk)h^BHReFkuU&_JJNp)XOZL+:JU=#?M*#b%]f5tl.PkkpPp>πU">5>[g5*?boWgPo#>S\+*P;hAgC#O**;_kg-dTF?sf+,#]XQf<rL1TnpU+TCm#csπU"7</kR#l+/8Ey(m*%IC;kmrN7mLS<=NwcL,5\?=T#X2o,?tPf5MKS]2b^p9g;4FEπU"Vc;dUk/e63KN$*Y#'cFlbSOuIY8<I4jiZD6/MgTFO5'EPdH[i,KT1sWnZ;6H'['πU"Qe#3iRpm,Kn_F-R9FP.8p;>Gti>7-/9=l(2toyKkl>AHm8ifiIrAaU+0h&6kv9DπU"Et%WA(t'/1*<i5YMp.ZAl_o(*8w+[r5vDLa4BiQY%ls6T=fji'Jc(+DW,HiRO\rπU"GZ:\pg0DDv7.U8)'WHFP8GffY0hVa>:1='C:<-4ZzU0:vsmDWcmSE(AFcdP.%RWπU"p0(d'vhQm+qW>eX.C\j7(wj]PvQ^&mQ#]Wm0d;t?2d7R&A:AWL-+Fs^Z3waA*mPπU"(2//Dv?[hif%Jdyt]>[w[0^IKM(yyVa7wmWi?U^q:5Md3GqIp2Qs2$SfwloZπU"AURhVDn*i.3*c((.\c_dZr4O$17/#0LEf:13%i6.%l.0:)4PU:F6bB&d]FK++kWπU"#ew%.JJ5;,3Mn+bZ*\Nb3s^.aiBnHwj8'YuBLRt%B>omdNwPd_Pv.^\\:D_npb\πU"uWHSn3o&C/zw8x'&HoLu[Ke##4_cV\meLZxvE:xWUKr*yuu'FF.o4efW)CU^7g%πU"Q.)hFl;c?ejI/HqP[EY&*I'_%p;mC6iZTFNbOH#pOAHl6mcnZI)ENRaUWF%6%T(πU"SIxCxlZ84EB$P=S<4QYYd1aAB^KW^%RLOAIVZ5G:KocAw^m_,kuqnHFu;xvq\TgπU"Nwk)]1rdk0wVma8xD3SXZ6SB12W]:a9im(Iw4-7O&*UPg)Q1..X0uH$FXF1aEXxπU".GjgI'wD'F+<W&k(bfFsI)(ySBT5+QiuGk3k,t5cUki3fCplx;J/UuOMO&Vf6S9πU"/8.h+HM.fZ_Lo'/2[/.unlI5MQ$<N?E,/k#s3f2pRP,<jPGC+W,p;O7)v7Jx.-bπU"eD)Mm>4i]3'\'uI#n(85[%Fxl=0bG,Z7<2u,1:1,gh+yt=U)0X].()4.m,)^πU"d+Cx'GODw0$oFo'E29+r=4^ZL[i)yo'k-ln,XVj3.?1g(iWc475Vn(6cWPR;YS3πU"(/?4S?su69dRZtiV><7Oo'ORmM\U=kFWe0SO010)ojc-L']rMY$&iYm=m#k42-FπU">X/=V^%G8S]YxlIDj;#8K8MOBG2R]=\=Q##2ar\)&'szP_)tEUez\1b=HH<vrgCπU"cU>E([UNcId*jT%W>*'sG$4.,++#haOi1:GOaPW/FGUDOOF'.JGQPF:iV;Q#9RXπU"pTG,^%Fc[P,*q1'-2F:GZtZw4+nf#o+dUI(mM9g5Ok.'E*OH)IG;=J9NPQQ.=_IπU"f]2E#xmS*mbKj-X$DUpNaJVv3,4.4&,(a?7UW'-$jdIzeA=j1*1/(Y#*d5gy*1SπU"z+:3;Gk]HSq7wAXxB[Aszsy%7N_yKjO)sOD$\.8GGp6MAzg>XdLn<;0R:dcO5DDπU"9ODI<OrdZ$7p9?tK:a%2$;2:=]g)U0lBGjS>,d8FO?^j)>jIs(PO%0D_=Uadk]#πU"6'tS/0*[h]ab*jj,6Gx5*xPFZk9(-dR-Xh0BYr2aYNXai=2h(4+aj;.5?5F6hziπU"bt9;FpZmd+b07L0nB-&?o4%/<tV4qGUg:/lgH_B^#/t795G/]Ju9JZX+WFS(l-iπU"L6(2[7r%l<%jWgHl=0*NgHCd/pEX&m(pRs+'=5dt/2xwTyKP:1N\.Fz.>_S3gECπU"^RSV^UMl>9ufnPMJFRlA/-X>1o?&\()0UHV>v[XvW5pJ9C_]:\*GF'CFkw%AoS7πU"IbE>6Vb^V7#TkvkInSYD[ekD8<;>\K05N=J':6<xQS5(4t^wD,$i?T--5>wC/&QπU"goM1K9m(OXyKJ)oqtGnXwI.,)G**Es+c3bn;#q\j\'Z<k=^UI0jR)B'.'R%]gBHπU"EY0KA26l\TF6rZt(XVZM>NP(-*pq3XNj.tT8_s:M*N\NDYXVplukkwr<BUZhLYFπU"o0%+hiA1v%MQGP;7Hu-V/2xl[v-qr?)bt4$:h3.C2G<k7^BFf*UUxhCan^wRu#]πU"5a/./(nSWFSC))?O(U&ScGj4%<6s^kkW[i[LWp/<>]5n?GOB9Y/wt9tJo37Puq0πU":i[X(&_JwWqg3;65NQ>M(gjgt6-:z?AMH0WQhg7tB=dsc7ui2)YRWnfh?nR\[2<πU"k;^<5Bi4>+3N+n\a.oGcf<LRvR$HDFM<,oS4K\oJ;]h^su&^5e;>dy5f)Fx#Fz$πU")7G%MQe/L*byic83<4cSs<4/'$?s%G&JvErZi6])+>apGTBH.1-RDU_j5;<<-HgπU"?q7kqC3\x:m1diygf)T^neyX4o*7#^3W^UvLWJ5U#B5K+Mr()_D*jAfQMltkTm+πU"W/.nPqdJ23yC(X>$J3HcN23ES^K2Vi:a'#[4UK.QB:8tlG\buAL<2MAl;vPb-nGπU"&hzA>p+R]FAcO2$h=<Wm*XxFCFb/F5X%xmU(mNqheKYhFX2jJ37[\=l>bRK5IDtπU"6BChKal0F2#$Vlsv;);W1EJ'RbtU1j(,4x7qNh%z:b06,e5HiG^RLT%=bk%Q-0>πU"O4/FREn&TGxf%B>D?Z&8jfU/3Yy$yIPu=&e9H*BK+';.2wIUn<1(Z6<RxFA/+qRπU"VP%%8dF63sRS?x#27ymx*UyGm<:OsTzng>.n;i>VvJz0p$r,jr,^7hR;P72iI5$πU"0.a^mu>Q)\?=Vu.ak7D3?V%9$;$hfI(]^mzo_:*(suO$uyJK'5ipI0'J4Dc%FO$πU"=6%]J5%0dw)*.obh^o8]quiTC#VF%/Nvoi&dt4y$Oc'mxaWv8n;AnMp9hVnW8LKπU"1zUK#ZDm9iexEr1d(801(b8iqW%V7#DRIn2P$4+8]Lmh]Ha&Ema^(f1J3qCoEj1πU"7qgJV1^\QIIu+'$uGmWOZHYGsrb,[J7aK%TETdoa)PBBBB1w^AXvH*_Op(6QRERπU"hDU%Zh$Y4uP*BhMHu?CJ'eS$QkYdcVsDU.j$Fe_JxgnTbx:J>ez'a9/a(Y'rg+pπU"_oy2b^/:/SL>UY4hLHcW_Y=ZjmE1WRODJEQBxH_Mva4HCl5n1^=&nVFc$^<CBdQπU"DH=<:[Jw8AiF5B8ZAh_88X,#6=4focpTTh*KR2LS%uGz3m)V]1Ll6e?#f9:R[0hπU"^i(u/cgdbDPjed4.B;V6eP#AL#b7Yke:ASI:WMQOT5P'*5w^5rGoF8lVj0dUjVXπU"KF#KPf?cllO4sEXZe38py'#%3[k<0Q4<DgLhBZYc3dU4fT)DO/0_**bL43nh2[)πU"D:\Txv=mVqvcZ$0(N]J\>=/jVbrU]$PJIO&HsKP*B\ll3AtFoq?Rh./T2o\^m=hπU"e)#qIzY4Vo//6]4$WgL(%+pZ*D.K;m):y^AuN4;(kVQ-t)O=:XsXQ400gecI8&\πU"jSw+,h?rZ8]IyK^F%17km).>IQ-5P])ez8o#Nnk%*mBSS=YC4$Y>^nM:lsXE:b#πU",o&nTQ[^UA1(;)HDxMEF+$*KbEB;wi:mbOuS;^WZb5oN*(-_PG6?,>*4n1=2R<IπU"C^uEt3+q4nY&4[O1^<QDQ=PT*[uu1o69W+)Dcs3#ow/I*U0/j+8^URDY\r2ArMyπU"f)s[ss'#]wjoJ0))6:(fgXLGHx1o7<B0>W[kdaJK-g'*6X$=8'W<f_8KK\.;F+3πU"WHIcS0m99aui'KiS=n%iiXn\%w2&IfPP+$Gh7B3>.kX+I:#\mS&nZZk1\AdOE6fπEND SUBπSUB V2πU"e5pF=TY0)247<y#pKwDw'g3;UO9Z*Kadd4TE$r2PH4[oR&:*A#f8PS#;5&%+'r%πU".DBQ\)q>LY7E).FD9WNL9OB:4aMTbh[iadY'T2$we4'*odu#*+ps..yAntrY;[MπU"Hi,ea:,yo8o5:yblQzwifzf;UJ,ZD;;U1Fm/K8?5m1I5?,j/MPg^-(k97t^M*O>πU"z6r/mT=(HJF<TGk2<G+[b:w4%M118O6Ve-,G2dcYe2D[%P2\/t5E%<-E=/:O6^AπU"6dPjVQ(#W)(1Eft#4D1G;$R,Z)j[X*Z4i0lzy^*#P7^bFYo<d$o*W2p=Hla>L$MπU"FrhM2qJV3f[Bb>XVNqj4-hY,7ai'PKln7-pQo_I>G^GcP\s_IVC%9dq(0X>mg&*πU"(a=d.8n&FP+SF,iJOM9RwFk3?$%ERt(WV#8<8BrJNI>.YaUkk#l9?LmDc%dRCD;πU"xMPA*+VGGojHMq#-0LrY54&5b/1mlR_1_zQAHp+U7wRj?uM9n5U#<g/29x>$uN2πU"6kBJF?$VP-V0bS566?wBO4kE>S(>qEfGCm<#qC(KM0Q$.jWjhes%)#CLP.q84hGπU"mMZU,dPdgQd$(I(C%%W5S<-5&i#.0dr&y4R+y9J8O4-'Kl9O,XM7GJ&O$zo#5B\πU">k#?nlk_5>o$7Y:kF>;mSlG4d:p&,W.alS0bJ>GD69?5C^e[M8g-0gC\roC=,G6πU"+oHik:.ok)?DqZZ$69JfK.ui1JEZ>Lel0:Zc#N6a-1K<B,G]L)LWo%pcM]/#i2(πU"XxNgu/8nCdIH\/Hw7IXH6ZKrUvzTV8ZQ=7)Iz^?hl+C#]FFAU#fpuadMIdnmY0:πU"%2ie7D/WhBoS)>Kwi&2&k^7zm+VytNG_),p%GZ1Ad&:HL2Ujxa8jy9l44h$1YocπU"3s*'=owQ3*aemf%Iq=Mdye%3_O4R%6J[2)l3Z,7#J/Q%R2*[rna2=D4yLqOQ.YmπU"5WKgURiAnjah0b50a.pP)9ayr\aGi/'MY$(W>:1+G%LO(okM%&quWC&;y8n1Qr1πU"9dXIG6%^Gf7Rra+mX(gl0F\zo/FDs?>8/,naG9?.^18%jOmnkwF9+I/#LQNLc2EπU"Za98f.nY%j=$=.tkU.uErkp5sz.-Qq7d-=)7di$IpT8t(o1JT(Vexn%pIz70d^+πU"#C^8w-dZReq6-TBjXbSj:IGMN&bS]./b]'-#R89:Gd'/4JEq,6W+LMx1=>U7811πU"0az.*K=t,2Pb(.#:QuF=cNXL-&r);id>jPpC)a.5qV8=rHO7[ve]V2ts#FM:ue'πU"EHeGSIr&APFx[vPh\fC.kiG*7aaM#3i$=BES.kgGiY[jhe+CA'=)hk<jCW8O0dUπU"n>l,0bjkxAD#rG8,X,FH)JW2#D-M^(MG=bp;MtiVtCetqKL8?6h>qioad*w9cTaπU"g+;[UN&YNs^>'tGfLs(?4hiWQbBH^OQHX/[qPO]nfx,KG9iE&IO79u+m)igB6K7πU";,$IWi(g(I](r$u6L.=(caw^.M/o'qK17wsv7<./Q)e&Ep,PB?tX65K)Czu-5Y8πU"L^IW1nEf>9A+mYrsOEl5BYYdJ3#9AzpBYk[U#0%d?4T2I=N19\nJmj3K(_9sQ3cπU"9Dw,w6\735d<4F3FBNI#Lehgpc-:h2u#+vC?(=e3^8rqXrud7pA:2wAfv<^$=xJπU"OE^J&\ZuG/YjD\ATg8/&f$K'eM6#;)f.uglL^[g.]/0GnV<n#:Oa&I9*4bwMp*uπU"xGT;&MsN1$Q.q42ZjOmMYHteFUq_lny5Odg-m3Y:fMff96KnQ&9x$Qb_dVO_+S[πU"3jC%qle/>$[4(tSEDajEDI4T37hrESBOVBB#6HUR7K#'IZ^CQu4%&2fw=W?Z?8YπU"QYSR>5#NhdoA9^TQQHUccTkt)kgG?]g\X*oE&p=kHqBe:er=9lp=a$Yk-1H;(*0πU",&*<m4a-1q0(V[Qoq]pN1Uh*d./D1v%:0xe6><U5+<.esRV:aaKmMk'lc-WK)?sπU"y(:NdSv.&(Yg-7a/nFEX5#$Y)j'hsO->(<eMeH?gsci't+wqIa8B=BF(S/d$Dn7πU"55]v_k%fh5t\R$AlykK*E6->gn:aBA2R^U/E/No(\q2;HK<&DN-om'KSwu$[RtbπU"ST-*T+S^r02uLnQO)E;P4V*,QL/kj\08#<^rtvpwcgf8vpsF(9=5DamnM'p1M8WπU"&_Lp/0r(8oGIDHlP\s_?[pB-qs+GnNW2KcA&9r\g61bs7uC+15'1Lfhu^c/76iXπU"&3CIOi[Aqx$:rlg>1S6^$pe6fjS?F,P?M9lY'a<t.+Z<N1T#kOC(,hsD$*465Y$πU"XRs^XlIc=l-A4\j,4J)$wsr9->vkoW)K/egB^MKv?gu-6&GLvQy]Ut838o)\=CaπU"&,w'rt#/v4KHjLHHj%1Sz,Hp$v9Xf/r1<z'rVgclX$a/qFVxf/>ZT=+U*)*A&=gπU"kj7,q;>;hBJumS:QZ\eA$fKjF,G?gT=Sr$ZAu5bM4hV*s=utfew*WV>o9C0=k)UπU"CZM\?ZU9uIKEu.7\zySTr-y.x5YzU82Vu4E08l-$qUlYY8=%_pyN8^V3Bl5f=BwπU"jSYhT%>dP'^Iwwa2XdirU\1v44jAy9+UxI:Vyrl+o6B^cgMNGn2nrryFhDh[VJSπU"f=jEj.)4:&\niO/;GMNPPSRj]LbEMi]/-EK9c]P_C6K/#8PbBVut]B2b2VpncUYπU"]wLdTmTZVW%neV]ULdmX(vINqI&x]kVw,ujur6qFFF8DnmaJLPWa81Qo]WCmlyrπU"bt]a]B#6b^qSvFJbILoHq9Stpi]FLtm3]Xma*JbLo(T%#dTV:.m>+JL_EJbPIJAπU"j8&1iNUP'[FRLL(W/C=<L:2PJY$[1aq%2.?803r&$tPs00h1&[oAjGz\[A](l;5πU"pqO(i3s-XsL=hG.SAlBJ1jw0/U89hxOo<zO(J+Aw&ZUlo;Lz>I'HW[iVO6g1fOTπU"2W_*B#lPm5.H<h$pVn>gq'^#hv3CM$0mTXI:sMX3uxuWR58uoK_vb\0[DNsq?>qπU"Bymq4S^p$o7=oPa)A's5F#;dK>av1DmH1+LOG+Z)B]^T_MQPFjp]5b<xL^TLK.$πU",Ehb4P_t#]m^TvriLZ8'3<^fLs1lV<N<)/7.]upgD8d(aG.Q/njJ-;mMcH*5b,)πU"kRIfo,?>Co;rH5vS.8r$Cq%(mzEy/:YU#LySn'h^jzu1yO)q&;ra^q5:JXbf*8-πU"X#32X<lv3jV3]53+4bOiVG4gvJySx]cv5h7?c&ojrv)tMg*[-cRwq^Qe4HDd8QnπU"\p*mxvG]Vj]npG28Qdbm]R0Cp22Xf7nlu]FF],lhItL\b>N1LH:RZrE:i)'j,=aπU"6&D&2XD$^%fh:ngWge;[lsxMV/ZKgI=]+np/V+Rb.0H%k[5aJDlmmGCRAW_l(,_πU".%AE$2+yH&OqvPY+&q1yJR(zBPMy5oy7^u.1Mc3-<JN96$YiGER%a]P(sllYe%QπU"bP<mSpHGhRz3bqdBZ+KmOH?T.Q69LS+e-mR4GFrKz$;54bhk1Cor_#i3<&LmG\vπU">z]e6QL]tsO8fS0.+aHcB]y^]tsE#OfT-y_*>Ve.QRq-a0Q&W75/1gRIuJ4=1K4πU"M(4N3h9/LYx\cIq\Ku+/ICiUPO7pO':e]\k$.+*6EdYhkFfpWsJO5.C_S?JubJNπU"Kn-qcnLp-hNIX^hn-1^hvf'vTbJOMVIXnnju[U4/2g?qcZg33LdgcGNHYmFboUKπU"<q6e[cLfJFvehA[[:m?01u%7*klD1sp3D8PAR7+#OKfA/M%$MGyRy)thJuA'C\2πU"94wHQ6ZWP,B16onyP'Q(:ZA4[U/(RdH)Sppoq6B7UuRj'qd5<Amq2R(P2>-PJS'πU"ilcJ9]i_Z1KA7uR(Uf8qDGk_+j2j\Mp2T30kh3,tsScqe*&t3\LfKV56/i-Xr7.πU"hdPH(NJr&5m7Gm3.Bi&%AMoj4CI%7?'ojRo7&pT_Ow;7P&A/tbqer1Kct+0mCTYπU"0>q0[*cs;b9^lMBZ[px#0p&Z9ja6],ZX\sqH#Cn9W#]p70mP;:r\S4sR3nqqaxvπU"VLJJhUu+.aMkWvR8g1k/GOp7W:kf;^U'AWT[0tkHv$DTku'x&up%()9%%%%-%,xπU"%HEhX#c[&M&%%%w.%%%-%%%%knlV%SifyE^df='=E1jNpdIVLAoZ/UUPlnH%^x[πU"SNmJ;/5z\Y&i\5#5NllHlcjD=-ulzd[d_nn,c[TJTj$^)BbA$r(L8vYKrMb)JyaπU"EU<[x(N0&NlxgaT:]J:&3_+W.MVV[g[x^P0VTD^OY\%/vP#/8gries0(EK'08<*πU"cA2$&d7P6Kus7L0Lxxl_sh6(D#>vJr-b.8Tj<mSPQcFiIou-Vf3]cK8,WcZj=.1πU"+8DJs?]q^)P9lV<R7KjZ1?4,Y6+H-L3nFmk.#pF*xPj)Q8tU,E7/6G(Al#NusD'πU"<K^n#9Z4?txuCtYp4JY*uWEY9n6lgy.u1Spqg'dnrfcrPgI*:dw#qS^Ytva0:^vπU"sG'-c-+&FdKLsfl)mWGT+55WZaHcOJnl\;NdYJgKibd/3fF'q=j8lqe1qh5IavQπU"u]AXnIs.S8[V827:l$eyn$IW:vZaDWeM(:J(VSD<,vF0FJLbu[LX2\yn[+qavmeπU"2WGc)n>up%()9%%%%-%-&%HEj*F]t&P&%%%s.%%%-%%%%knlW%SifyE^dVa'<E1πU"j?tE]3%ce/5=-T$d0RSnETm2js3R9jqA-5'LEjdRVlf.tk*t#cDY\]mcELjwqiAπU"2uIjH>bO1TiL;CHx.YjjgmSkiKiKab>xUDJ32aIsgSoF9XyahvuS^E%:6jQd&FqπU"pO_YId?>X;pie,bgg)j35+<lo0;o3DF.&TI4OnWYj#=:M5*Mmq3H)J_[_ffnD$uπU"7cHP'SM)%Ipkf&+r3ht'&=?P9t)Zt;kSmpsC;=LUVJ#+t/,B3$uiiNmF(\ow\,PπU"IF?fNZyb-^fiA#QN_B(J<I^#eeq,rMVM^VZp4J.KqB$I-sW3OfX7-Am,gGjDE6wπU"J2DTKi,S+d6GA_J\Hwbi?[3_[L:gfT?NCa=DB2x<(K]0Q&)U5irpJIl\7JL()78πU"k=uhQW6:e4W_<9^E(U,lWPq/IhhLgK$a3mq]Q+sUZse&yf_rK>fZNjEcYv^(,MIπU"J;J9B1nfS6;0bhg'>t#K9mM_c%rbbD%dup&%'9%9%%%%-C%Gf7(Esz>+[=X%:%vπU"c%%%1%%%%%%%%%&%E%%%%%%%%%x%umwk%nyjS%gfxu%p&'9%%9%%#%-%xB%HEXVπU"#c[M%&%%w%.%%-%%%%%%%%%&%%E%%+%gX%%%knl%VSif%yup&%'9%9%%%%-=%&%πU"HRE*F]*tP&%%%s.%%%-%%%%%%%%%&%E#%%%a%Z%%k%nlWS%ifyu%p*+%%%%%(#%πU"(%u%%%%^%\%%%%%πEND SUBπV2πCLOSE:IF S=223AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπManny Najera                   BALLOON X                      www.flashgames.com             03-09-96 (16:53)       QB, QBasic, PDS        2096 66106    BALLOONX.BAS'---------------------------------------------------------------------------π'Balloon X v2.1 - Written By Manny Najeraπ'π'π'How To Play:π'π'In a nutshell, you fly your little balloon around, looking for gems.π'You need to get gems in order to go on to the next level.π'But beware!  There are missle-thingys and torpedos and shrapnelπ'bombs and other menaces that you have to look out for.π'--> Just press F1 during the game to see the instructions.π'π'Other Info:π'π'If you are running this in Qbasic, you may see some unexpected imagesπ'during screen transitions.  I made this on a 486sx 25mhz, so some ofπ'you other guys might have to turn turbo off.  Basic isn't too well withπ'keeping a consistent speed.π'π'Special Stuff:π'π'Much thanks to Simon, the guy who sat next to me in word processing class!π'He's the one that said that this game was too hard and came up with theπ'idea of making the coin enemys into extra life thingys.π'π'The source code is pretty cheap and choppy, who knows if you can useπ'it?  If you plan to use my code or ideas, Email me first and we'llπ'talk.  Don't rip code without permission!π'π'---------------------------------------------------------------------------πDEFINT A-ZπOPTION BASE 1π'$DYNAMICππ'Declares and suchππDECLARE SUB MakeQuits ()πDECLARE SUB MakeHelpScreen ()πDECLARE SUB Center (Row, Text$, C)πDECLARE SUB CreateTable ()πDECLARE SUB MakeStars (NumStars%)πDECLARE SUB GetKey ()πDECLARE SUB ProcessMotion ()πDECLARE SUB DrawBalloon ()πDECLARE SUB MakeTitleScreen ()πDECLARE SUB DoMenu ()πDECLARE SUB MakeIntroScreen ()πDECLARE SUB DoIntro ()πDECLARE SUB DoExit ()πDECLARE SUB StartGame ()πDECLARE SUB DrawArena ()πDECLARE SUB MainGame ()πDECLARE SUB LevDis ()πDECLARE SUB DoTorpedo (lev)πDECLARE SUB MakeInfo ()πDECLARE SUB SeeInfo ()πDECLARE SUB DoMissle (lev)πDECLARE SUB DoItem ()πDECLARE SUB DoBItem ()πDECLARE SUB DeadDuck ()πDECLARE SUB Initit ()πDECLARE SUB DrawBlankArena ()πDECLARE SUB StartBonus ()πDECLARE SUB DoBomb (lev)πDECLARE SUB DoDemoMode ()πDECLARE SUB LevelClear ()πDECLARE SUB DoCheapEnding ()πDECLARE FUNCTION PointHit% (Hx, Hy)πDECLARE FUNCTION BoxHit% (Hx1, Hy1, hx2, hy2)ππRANDOMIZE TIMERππ'OPENING TEXTππCOLOR 15, 0: PRINT "Balloon X v2.01"πPRINT "Free memory bytes:"; FRE(-1)  'Just wanna see how muchπPRINT "Loading..."                   'I can stuff in...ππ'DEFSππDEF Fnr (X) = INT(RND * X) + 1ππ'TYPESππTYPE BItemTypeπX AS INTEGERπY AS INTEGERπYm AS INTEGERπnum AS INTEGERπActive AS INTEGERπClock AS INTEGERπEND TYPEππTYPE BombTypeπActive AS INTEGERπClock AS INTEGERπRclock AS INTEGERπAnclock AS INTEGERπAnFlag AS INTEGERπFx AS INTEGERπFy AS INTEGERπSx AS INTEGERπSy AS INTEGERπEND TYPEππTYPE HighType                 'I was gonna make a highπPlayerName AS STRING * 3      'score table, but I wantedπPlayerScore AS DOUBLE         'to contain everything inπPlayerDate AS STRING * 10     'a single BAS fileπPlayerLevel AS INTEGER        'You can make one with this type...πEND TYPEππTYPE NormalTypeπScore AS DOUBLEπLevel AS INTEGERπGems AS INTEGERπGemReq AS INTEGERπLives AS INTEGERπEND TYPEππTYPE BalloonTypeπW AS INTEGERπH AS INTEGERπX AS INTEGERπY AS INTEGERπXm AS INTEGERπYm AS INTEGERπAnclock AS INTEGERπAnFlag AS INTEGERπDead AS INTEGERπDeadClock AS INTEGERπDx AS INTEGERπDy AS INTEGERπEND TYPEππTYPE MenuTypeπnum AS INTEGERπClock AS INTEGERπEND TYPEππTYPE TorpedoTypeπX AS INTEGERπY AS INTEGERπXm AS INTEGERπYm AS INTEGERπActive AS INTEGERπActCount AS INTEGERπExploding AS INTEGERπEcount AS INTEGERπEx AS INTEGERπExx AS INTEGERπEyy AS INTEGERπLoCount AS INTEGERπCount AS INTEGERπFx AS INTEGERπFy AS INTEGERπEND TYPEππTYPE CoinType                'I was gonna have this enemy calledπX AS INTEGER                 'THE COINS, just coins that spin at youπY AS INTEGER                 'in sine waves, but they made the gameπXm AS INTEGER                'way too hard.πActive AS INTEGERπActCount AS INTEGERπAnclock AS INTEGERπAnFlag AS INTEGERπEND TYPEππTYPE MissleTypeπX AS INTEGERπY AS INTEGERπXm AS INTEGERπActive AS INTEGERπActCount AS INTEGERπEND TYPEππTYPE ItemTypeπX AS INTEGERπY AS INTEGERπActive AS INTEGERπActCount AS INTEGERπnum AS INTEGERπEndCount AS INTEGERπEND TYPEππTYPE StarTypeπX AS INTEGERπY AS INTEGERπYm AS INTEGERπT AS INTEGERπC AS INTEGERπEND TYPEππ'DIMSπDIM SHARED BItem(5) AS BItemTypeπDIM SHARED Bomb(30) AS BombTypeπDIM SHARED Star(60) AS StarTypeπDIM SHARED Item AS ItemTypeπDIM SHARED XSin(360) AS SINGLE, Xcos(360) AS SINGLEπDIM SHARED C(10) AS CoinTypeπDIM SHARED Missle(10) AS MissleTypeπDIM SHARED High AS HighTypeπDIM SHARED Current AS NormalTypeπDIM SHARED Bal AS BalloonTypeπDIM SHARED Menu AS MenuTypeπDIM SHARED ManX, ManY, LDF, l$, Active, MpπDIM SHARED Tor(100) AS TorpedoTypeπDIM SHARED Bl AS DOUBLEππ'READSπDIM SHARED Torpm(16)πFOR I = 1 TO 16πREAD Torpm(I)πNEXTπDIM SHARED Torp(16)πFOR I = 1 TO 16πREAD Torp(I)πNEXTπDIM SHARED Pl(30)πFOR I = 1 TO 30πREAD Pl(I)πNEXTπDIM SHARED P5(30)πFOR I = 1 TO 30πREAD P5(I)πNEXTπDIM SHARED P1(30)πFOR I = 1 TO 30πREAD P1(I)πNEXTπDIM SHARED Mrm(22)πFOR I = 1 TO 22πREAD Mrm(I)πNEXTπDIM SHARED Mr(22)πFOR I = 1 TO 22πREAD Mr(I)πNEXTπDIM SHARED Mlm(22)πFOR I = 1 TO 22πREAD Mlm(I)πNEXTπDIM SHARED Ml(22)πFOR I = 1 TO 22πREAD Ml(I)πNEXTπDIM SHARED Coin3m(16)πFOR I = 1 TO 16πREAD Coin3m(I)πNEXTπDIM SHARED Coin3(16)πFOR I = 1 TO 16πREAD Coin3(I)πNEXTπDIM SHARED Coin2m(16)πFOR I = 1 TO 16πREAD Coin2m(I)πNEXTπDIM SHARED Coin2(16)πFOR I = 1 TO 16πREAD Coin2(I)πNEXTπDIM SHARED Coin1m(16)πFOR I = 1 TO 16πREAD Coin1m(I)πNEXTπDIM SHARED Coin1(16)πFOR I = 1 TO 16πREAD Coin1(I)πNEXTπDIM SHARED Bal5m(28)πFOR I = 1 TO 28πREAD Bal5m(I)πNEXTπDIM SHARED Bal5(28)πFOR I = 1 TO 28πREAD Bal5(I)πNEXTπDIM SHARED Bal4m(28)πFOR I = 1 TO 28πREAD Bal4m(I)πNEXTπDIM SHARED Bal4(28)πFOR I = 1 TO 28πREAD Bal4(I)πNEXTπDIM SHARED Bal3m(28)πFOR I = 1 TO 28πREAD Bal3m(I)πNEXTπDIM SHARED Bal3(28)πFOR I = 1 TO 28πREAD Bal3(I)πNEXTπDIM SHARED Bal2m(28)πFOR I = 1 TO 28πREAD Bal2m(I)πNEXTπDIM SHARED Bal2(28)πFOR I = 1 TO 28πREAD Bal2(I)πNEXTπDIM SHARED Bal1m(28)πFOR I = 1 TO 28πREAD Bal1m(I)πNEXTπDIM SHARED Bal1(28)πFOR I = 1 TO 28πREAD Bal1(I)πNEXTπDIM SHARED Up(38)πFOR I = 1 TO 38πREAD Up(I)πNEXTπDIM SHARED Right(38)πFOR I = 1 TO 38πREAD Right(I)πNEXTπDIM SHARED Q(38)πFOR I = 1 TO 38πREAD Q(I)πNEXTπDIM SHARED Left(38)πFOR I = 1 TO 38πREAD Left(I)πNEXTπDIM SHARED F1(38)πFOR I = 1 TO 38πREAD F1(I)πNEXTπDIM SHARED Down(38)πFOR I = 1 TO 38πREAD Down(I)πNEXTπDIM SHARED Alt(38)πFOR I = 1 TO 38πREAD Alt(I)πNEXTπDIM SHARED Title(548)πFOR I = 1 TO 548πREAD Title(I)πNEXTπDIM SHARED Icon(38)πFOR I = 1 TO 38πREAD Icon(I)πNEXTπDIM SHARED Iconm(38)πFOR I = 1 TO 38πREAD Iconm(I)πNEXTπDIM SHARED Manny(380)πFOR I = 1 TO 380πREAD Manny(I)πNEXTπDIM SHARED Score(82)πFOR I = 1 TO 82πREAD Score(I)πNEXTπDIM SHARED me(2002)πFOR I = 1 TO 2002πREAD me(I)πNEXTπDIM SHARED Gop(146)πFOR I = 1 TO 146πREAD Gop(I)πNEXTπDIM SHARED Message(44) AS STRING * 39πFOR I = 1 TO 44πREAD Message(I)πNEXTπDIM SHARED G(5) AS STRINGπFOR I = 1 TO 5πREAD G(I)πNEXTπDIM SHARED Bomb1(18)πFOR I = 1 TO 18πREAD Bomb1(I)πNEXTπDIM SHARED Bomb1m(18)πFOR I = 1 TO 18πREAD Bomb1m(I)πNEXTπDIM SHARED Bomb2(18)πFOR I = 1 TO 18πREAD Bomb2(I)πNEXTπDIM SHARED Bomb2m(18)πFOR I = 1 TO 18πREAD Bomb2m(I)πNEXTπDIM SHARED Bomb3(18)πFOR I = 1 TO 18πREAD Bomb3(I)πNEXTπDIM SHARED Bomb3m(18)πFOR I = 1 TO 18πREAD Bomb3m(I)πNEXTπDIM SHARED Bomb4(18)πFOR I = 1 TO 18πREAD Bomb4(I)πNEXTπDIM SHARED Bomb4m(18)πFOR I = 1 TO 18πREAD Bomb4m(I)πNEXTπDIM SHARED Lc(164)πFOR I = 1 TO 164πREAD Lc(I)πNEXTππ'PREDSππInititππFOR I = 1 TO 60πStar(I).X = Fnr(305) + 10πStar(I).Y = Fnr(180) + 10πStar(I).T = Fnr(3)πSELECT CASE Star(I).TπCASE 1πStar(I).C = 8πCASE 2πStar(I).C = 7πCASE 3πStar(I).C = 15πEND SELECTπNEXTππ'MAIN CODEππMp = 1ππCreateTable     'Sin/Cos table... for all the explosionsππCLSπDrawArenaπSCREEN 7, 0, 1, 0     'This makes no sense at all...πMakeIntroScreenπPCOPY 1, 0πMakeInfoπMakeHelpScreenπMakeQuitsπSCREEN 7, 0, 1, 0πDoIntroπMakeTitleScreenπDoMenuππ'Here are all the graphics for the gameπ'Get statement???ππDATA &H0005,&H0007,&H8888,&H8888,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&H8888,&H8888,&HD8D8,&HD8D8,&HD8D8,&HD8D8πDATA &H0005,&H0007,&H7171,&H2171,&H88F8,&H8800,&H00F8,&H8800πDATA &H00F8,&H0000,&H7151,&H0151,&H2101,&H2101,&H2121,&H2121πDATA &H000D,&H0007,&HF8FF,&HF8FF,&H0000,&HF8FF,&H889A,&HF8FFπDATA &H7065,&HF8FF,&HA8DA,&HF8FF,&H5025,&HF8FF,&H88DA,&HF8FFπDATA &H7025,&HF8FF,&HB8DA,&HF8FF,&H4025,&HF8FF,&HB888,&HF8FFπDATA &H4077,&HF8FF,&HF8FF,&HF8FF,&H0000,&HF8FFπDATA &H000D,&H0007,&H0300,&HFBFF,&H0000,&HFBFF,&H0200,&HFBFFπDATA &H7177,&HFBFF,&H0300,&HFBFF,&H5045,&HFBFF,&H0300,&HFBFFπDATA &H5075,&HFBFF,&H0300,&HFBFF,&H5015,&HFBFF,&H0200,&HFBFFπDATA &H7177,&HFBFF,&H0300,&HFBFF,&H0000,&HFBFFπDATA &H000D,&H0007,&HF8FF,&H0000,&H0000,&HF8FF,&H8898,&H7067πDATA &H7067,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&HA8DA,&H5025πDATA &H5025,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&H8888,&H7077πDATA &H7077,&HF8FF,&HF8FF,&H0000,&H0000,&HF8FFπDATA &H0009,&H0005,&H801F,&H801F,&H801F,&H801F,&H8086,&H8086πDATA &H8086,&H8086,&H0000,&H0000,&H0000,&H0000,&H8386,&H8386πDATA &H8386,&H8386,&H821F,&H821F,&H821F,&H821FπDATA &H0009,&H0005,&H00E0,&H0080,&H0000,&H00C0,&H0001,&H0000πDATA &H0058,&H0029,&H8061,&H81E1,&H81EF,&H00D2,&H0001,&H0100πDATA &H0158,&H0229,&H00E0,&H0180,&H0100,&H02C0πDATA &H0009,&H0005,&H03FC,&H03FC,&H03FC,&H03FC,&H90B0,&H90B0πDATA &H90B0,&H90B0,&H0000,&H0000,&H0000,&H0000,&H90B0,&H90B0πDATA &H90B0,&H90B0,&H03FC,&H03FC,&H03FC,&H03FCπDATA &H0009,&H0005,&H9C03,&H9000,&H0000,&H9801,&H0040,&H0000πDATA &H0B0D,&H054A,&H0CC3,&H9CC3,&H9DFB,&H9A25,&H0040,&H0000πDATA &H0B0D,&H054A,&H9C03,&H9000,&H0000,&H9801πDATA &H0007,&H0007,&HFEFE,&HFEFE,&HFEFE,&HFEFE,&H8282,&H8282πDATA &H0000,&H0000,&H8282,&H8282,&HFEFE,&HFEFE,&HFEFE,&HFEFEπDATA &H0007,&H0007,&H0000,&H0000,&H0000,&H0000,&H7C7C,&H007CπDATA &H7E02,&H807E,&H0000,&H7C00,&H0000,&H0000,&H0000,&H0000πDATA &H0007,&H0007,&HFEFE,&HFEFE,&HC6C6,&HC6C6,&H8282,&H8282πDATA &H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6,&HFEFE,&HFEFEπDATA &H0007,&H0007,&H0000,&H0000,&H3838,&H0038,&H7C04,&H007CπDATA &H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800,&H0000,&H0000πDATA &H0007,&H0007,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &H0007,&H0007,&H3838,&H0038,&H7C04,&H007C,&H7E02,&H807EπDATA &H7E02,&H807E,&H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800πDATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6πDATA &HF6F6,&HF6F6,&HFAFA,&HFAFAπDATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FEπDATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038πDATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008πDATA &H0808,&H0008,&H0404,&H0004πDATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6πDATA &HF6F6,&HF6F6,&HF6F6,&HF6F6πDATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FEπDATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038πDATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008πDATA &H0808,&H0008,&H0808,&H0008πDATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEEπDATA &HEEEE,&HEEEE,&HEEEE,&HEEEEπDATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FEπDATA &H0000,&H04FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038πDATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H1010,&H0010πDATA &H1010,&H0010,&H1010,&H0010πDATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDEπDATA &HDEDE,&HDEDE,&HDEDE,&HDEDEπDATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FEπDATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038πDATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H2020,&H0020πDATA &H2020,&H0020,&H2020,&H0020πDATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6πDATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDEπDATA &HDEDE,&HDEDE,&HBEBE,&HBEBEπDATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FEπDATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038πDATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H2020,&H0020πDATA &H2020,&H0020,&H4040,&H0040πDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00E3,&H00E3πDATA &H00E3,&H8080,&H00C1,&H00C1,&H00C1,&H8080,&H00F7,&H00F7πDATA &H00F7,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00F3,&H00F3πDATA &H00F3,&H8080,&H00C1,&H00C1,&H00C1,&H8080,&H00F3,&H00F3πDATA &H00F3,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00E3,&H00E3,&H00E3,&H8080,&H00DD,&H00DDπDATA &H00DD,&H8080,&H00DD,&H00DD,&H00DD,&H8080,&H00D9,&H00D9πDATA &H00D9,&H8080,&H00E1,&H00E1,&H00E1,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00E7,&H00E7πDATA &H00E7,&H8080,&H00C1,&H00C1,&H00C1,&H8080,&H00E7,&H00E7πDATA &H00E7,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00C5,&H00C5,&H00C5,&H8080,&H00DD,&H00DDπDATA &H00DD,&H8080,&H00CD,&H00CD,&H00CD,&H8080,&H00DD,&H00DDπDATA &H00DD,&H8080,&H00DD,&H00DD,&H00DD,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H0009,&H0009,&H80FF,&H80FF,&H80FF,&H00FF,&H00FF,&H00FFπDATA &H00FF,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00F7,&H00F7πDATA &H00F7,&H8080,&H00C1,&H00C1,&H00C1,&H8080,&H00E3,&H00E3πDATA &H00E3,&H8080,&H00F7,&H00F7,&H00F7,&H8080,&H00FF,&H00FFπDATA &H00FF,&H8080,&H0080,&H0080,&H0080,&H807FπDATA &H000D,&H0009,&HF8FF,&HF8FF,&HF8FF,&HF0FF,&HF0FF,&HF0FFπDATA &HF0FF,&H0880,&HB0ED,&HB0ED,&HB0ED,&H0880,&H10D5,&H10D5πDATA &H10D5,&H0880,&HB0C5,&HB0C5,&HB0C5,&H0880,&HB0D5,&HB0D5πDATA &HB0D5,&H0880,&H90D5,&H90D5,&H90D5,&H0880,&HF0FF,&HF0FFπDATA &HF0FF,&H0880,&H0080,&H0080,&H0080,&HF87FπDATA  &H0063,&H0015,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&HFF7F,&H0000πDATA  &H0077,&H0000,&H0000,&H0107,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7F00,&H00FF,&H7700πDATA  &H0000,&H0000,&H0700,&HC001,&HFF7F,&H0080,&H0077,&H0000,&H0000,&H0107πDATA  &H00C0,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H7F00,&H80FF,&H7700,&H0000,&H0000,&H0700,&HC001πDATA  &HFF7F,&H00C0,&H0077,&H0000,&H0000,&H0107,&H00C0,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7F00πDATA  &HC0FF,&H7700,&H0000,&H0000,&H0700,&HC001,&H0070,&H00E0,&H0077,&H0000πDATA  &H0000,&H0107,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H7000,&HE000,&H7700,&H0000,&H0000πDATA  &H0700,&HC001,&H0070,&H00E0,&H0077,&H0000,&H0000,&H0107,&H00C0,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H7000,&HE000,&H7700,&H0000,&H0000,&H0700,&HC001,&H0070,&HFFE1πDATA  &H1F77,&HFCC1,&HE07F,&H8307,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7000,&HE100,&H77FFπDATA  &HC11F,&H7FFC,&H07E0,&HC083,&H0070,&HFFE3,&H3F77,&HFEE3,&HF07F,&HC703πDATA  &H0080,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H7000,&HE300,&H77FF,&HE33F,&H7FFE,&H03F0,&H80C7πDATA  &HFF71,&HFF87,&H7F77,&HFFF7,&HF87F,&HEF01,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7100πDATA  &H87FF,&H77FF,&HF77F,&H7FFF,&H01F8,&H00EF,&HFF71,&H078E,&H7077,&H0777πDATA  &H3870,&HFE00,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H7100,&H8EFF,&H7707,&H7770,&H7007πDATA  &H0038,&H00FE,&H0070,&H07EE,&H7077,&H0777,&H3870,&H7C00,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H7000,&HEE00,&H7707,&H7770,&H7007,&H0038,&H007C,&H0070,&H07EEπDATA  &H7077,&H0777,&H3870,&HFE00,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7000,&HEE00,&H7707πDATA  &H7770,&H7007,&H0038,&H00FE,&H0070,&H07EE,&H7077,&H0777,&H3870,&HEF01πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H7000,&HEE00,&H7707,&H7770,&H7007,&H0138,&H00EFπDATA  &H0070,&H07EE,&H7077,&H0777,&H3870,&HC703,&H0080,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7000πDATA  &HEE00,&H7707,&H7770,&H7007,&H0338,&H80C7,&H0070,&H07EE,&H7077,&H0777πDATA  &H3870,&H8307,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H7000,&HEE00,&H7707,&H7770,&H7007πDATA  &H0738,&HC083,&H0070,&H07EE,&H7077,&H0777,&H3870,&H0107,&H00C0,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H7000,&HEE00,&H7707,&H7770,&H7007,&H0738,&HC001,&H0070,&H07EEπDATA  &H7077,&H0777,&H3870,&H0107,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7000,&HEE00,&H7707πDATA  &H7770,&H7007,&H0738,&HC001,&HFF71,&HE7CF,&H7077,&H0777,&H3870,&H0107πDATA  &H00C0,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H7100,&HCFFF,&H77E7,&H7770,&H7007,&H0738,&HC001πDATA  &HFF71,&HE787,&H7F77,&HFFF7,&H3870,&H0107,&H00C0,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H7100πDATA  &H87FF,&H77E7,&HF77F,&H70FF,&H0738,&HC001,&HFF71,&HE703,&H3F77,&HFEE3πDATA  &H3870,&H0107,&H00C0,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H7100,&H03FF,&H77E7,&HE33F,&H70FEπDATA  &H0738,&HC001,&H0000,&H0000,&H1F00,&HFCC1,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA  &H0000,&H0000,&H0000,&H0000,&HC11F,&H00FC,&H0000,&H0000πDATA &H0009,&H0009,&H001C,&H0000,&H0000,&H0000,&H007F,&H0000πDATA &H0000,&H0000,&H007F,&H0000,&H0000,&H001C,&H80FF,&H0008πDATA &H0000,&H003E,&H80FF,&H001C,&H0008,&H003E,&H80FF,&H0008πDATA &H0000,&H003E,&H007F,&H0000,&H0000,&H001C,&H007F,&H0000πDATA &H0000,&H0000,&H001C,&H0000,&H0000,&H0000πDATA &H0009,&H0009,&H80E3,&H80E3,&H80E3,&H80E3,&H8080,&H8080πDATA &H8080,&H8080,&H8080,&H8080,&H8080,&H8080,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&H8080,&H8080,&H8080,&H8080,&H8080,&H8080πDATA &H8080,&H8080,&H80E3,&H80E3,&H80E3,&H80E3πDATA &H0036,&H001B,&HFFFF,&HFFFF,&HFFFF,&HFFFC,&HFFFF,&HFFFFπDATA &HF8FF,&H0000,&H0000,&H0000,&HFF00,&HFFFF,&HFFFF,&HFCFFπDATA &HFFFF,&HFFFF,&HFFFF,&H80FC,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HFF00,&HFFFF,&HFFFF,&HF8FF,&HFFFF,&HFFFFπDATA &HFFFF,&H80FC,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &HFF00,&HFFFF,&HFFFF,&HF8FF,&HFFFF,&HFFFF,&HFFFF,&H80FCπDATA &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&HFF00,&HFFFFπDATA &HFFFF,&HF8FF,&HFFFF,&HCCE1,&HCCCC,&H87FC,&H000E,&H0000πDATA &H0000,&H0E07,&H331E,&H3333,&HF800,&HFFF1,&HFFFF,&HF8FFπDATA &H70FC,&HCCC0,&HCCCC,&H84FC,&H0000,&H0000,&H0000,&H8F07πDATA &H333F,&H3333,&HFB00,&HFF7E,&HFFFF,&HF8FF,&H30FC,&HC4CCπDATA &HCCC4,&H84FC,&H0010,&H0000,&H0000,&HDF07,&H3B33,&H333BπDATA &HFB00,&HFFAE,&HFFFF,&HF8FF,&H30FC,&HC4CC,&HE1C4,&H84FCπDATA &H0010,&H0000,&H0000,&HDF07,&H3B33,&H1E3B,&HFB00,&HFFAEπDATA &HFFFF,&HF8FF,&H30FC,&HC8C0,&HE1C8,&H84FC,&H0010,&H0000πDATA &H0000,&HDF07,&H373F,&H1E37,&HFB00,&HFFAE,&HFFFF,&HF8FFπDATA &H00FC,&HC8CC,&HF3C8,&H84FC,&H0000,&H0000,&H0000,&HFF07πDATA &H3733,&H0C37,&HFB00,&HFFFE,&HFFFF,&HF8FF,&H00FC,&HC8CCπDATA &HF3C8,&H84FC,&H0000,&H0000,&H0000,&HFF07,&H3733,&H0C37πDATA &HFB00,&HFFFE,&HFFFF,&HF8FF,&H00FC,&HCCCC,&HF3CC,&H84FCπDATA &H0000,&H0000,&H0000,&HFF07,&H3333,&H0C33,&HFB00,&HFFFEπDATA &HFFFF,&HF8FF,&HCCFC,&HCCCC,&HF3CC,&H84FC,&H0044,&H0000πDATA &H0000,&H7707,&H3333,&H0C33,&HFA00,&HFFAA,&HFFFF,&HF8FFπDATA &HCCFC,&HFFFF,&HFFFF,&H84FC,&H0044,&H0000,&H0000,&H7707πDATA &H0000,&H0000,&HFA00,&HFFAA,&HFFFF,&HF8FF,&HCCFC,&HC3E1πDATA &HFFC0,&H84FC,&H0044,&H0000,&H0000,&H7707,&H3C1E,&H003FπDATA &HFA00,&HFFAA,&HFFFF,&HF8FF,&HDCFC,&HC1C0,&HFFC0,&H84FCπDATA &H0004,&H0000,&H0000,&H2707,&H3E3F,&H003F,&HFA00,&HFFDAπDATA &HFFFF,&HF8FF,&HFCFC,&HCCCC,&HFFCF,&H84FC,&H0004,&H0000πDATA &H0000,&H0707,&H3333,&H0030,&HFA00,&HFFFA,&HFFFF,&HF8FFπDATA &HFCFC,&HCCCC,&HFFCF,&H84FC,&H0004,&H0000,&H0000,&H0707πDATA &H3333,&H0030,&HFA00,&HFFFA,&HFFFF,&HF8FF,&HFCFC,&HCCC0πDATA &HFFC3,&H84FC,&H0004,&H0000,&H0000,&H0707,&H333F,&H003CπDATA &HFA00,&HFFFA,&HFFFF,&HF8FF,&HFCFC,&HCCCC,&HFFCF,&H84FCπDATA &H0004,&H0000,&H0000,&H0707,&H3333,&H0030,&HFA00,&HFFFAπDATA &HFFFF,&HF8FF,&HFCFC,&HCCCC,&HFFCF,&H84FC,&H0004,&H0000πDATA &H0000,&H0707,&H3333,&H0030,&HFA00,&HFFFA,&HFFFF,&HF8FFπDATA &HFCFC,&HC1CC,&HFFC0,&H84FC,&H0004,&H0000,&H0000,&H0707πDATA &H3E33,&H003F,&HFA00,&HFFFA,&HFFFF,&HF8FF,&HF8F8,&HC3CCπDATA &HFFC0,&H80FC,&H0000,&H0000,&H0000,&H0707,&H3C33,&H003FπDATA &HF800,&HFFF8,&HFFFF,&HF8FF,&HFFFF,&HFFFF,&HFFFF,&H80FCπDATA &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&HFF00,&HFFFFπDATA &HFFFF,&HF8FF,&HFFFF,&HFFFF,&HFFFF,&H80FC,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&HFF00,&HFFFF,&HFFFF,&HF8FFπDATA &HFFFF,&HFFFF,&HFFFF,&H80FC,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HFF00,&HFFFF,&HFFFF,&HF8FF,&HFFFF,&HFFFFπDATA &HFFFF,&H00FC,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8000,&H0000,&H0000,&H0000πDATA &H0022,&H0008,&HE779,&H783C,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H7900,&H3CE7,&H0078,&HEFFB,&HF8BE,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&HFB00,&HBEEF,&H00F8,&H0DC3,&HC0B6πDATA &H0000,&H0000,&H0000,&H0000,&H0000,&HC300,&HB60D,&H00C0πDATA &H0DE3,&HE1BC,&H00C0,&H0000,&H0000,&H0000,&H0000,&HE300πDATA &HBC0D,&HC0E1,&H0D7B,&HE1B6,&H00C0,&H0000,&H0000,&H0000πDATA &H0000,&H7B00,&HB60D,&HC0E1,&H0D1B,&HC0B6,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H1B00,&HB60D,&H00C0,&HEFFB,&HF8B6πDATA &H0000,&H0000,&H0000,&H0000,&H0000,&HFB00,&HB6EF,&H00F8πDATA &HE7F1,&H7836,&H0000,&H0000,&H0000,&H0000,&H0000,&HF100πDATA &H36E7,&H0078πDATA &H0050,&H0064,&HDD5D,&H05C0,&H00C0,&H0000,&H0000,&HDD5DπDATA &H05C0,&H00C0,&H0000,&H0000,&HDD5D,&H05C0,&H00C0,&H0000πDATA &H0000,&H22A2,&H5A3D,&H5530,&H45D5,&H15C0,&HFFAF,&H0E80πDATA &H0080,&H0000,&H0000,&HFFAF,&H0E80,&H0080,&H0000,&H0000πDATA &HFFAF,&H0E80,&H0080,&H0000,&H0000,&H0050,&HF17E,&HAA68πDATA &HABBB,&H2AA0,&HFF57,&H0000,&H0000,&H0000,&H0000,&HFF57πDATA &H0000,&H0000,&H0000,&H0000,&HFF57,&H0000,&H0000,&H0000πDATA &H0000,&H00A8,&H5FFD,&H00C0,&H5515,&H1140,&HFEBF,&H08A8πDATA &H0000,&H0000,&H0000,&HFEBF,&H08A8,&H0000,&H0000,&H0000πDATA &HFEBF,&H08A8,&H0000,&H0000,&H0000,&HA940,&HF757,&H0088πDATA &HAF0A,&H2AE0,&HFF5D,&H0040,&H0000,&H0000,&H0000,&HFF5DπDATA &H0040,&H0000,&H0000,&H0000,&HFF5D,&H0040,&H0000,&H0000πDATA &H0000,&H50A2,&H7DBD,&H0000,&H5D00,&H5440,&HFFAF,&H00A0πDATA &H0000,&H0000,&H0000,&HFFAF,&H00A0,&H0000,&H0000,&H0000πDATA &HFFAF,&H00A0,&H0000,&H0000,&H0000,&H2A52,&H285E,&H0000πDATA &H2F00,&H2AA0,&HFF57,&H0040,&H0000,&H0000,&H0000,&HFF57πDATA &H0040,&H0000,&H0000,&H0000,&HFF57,&H0040,&H0000,&H0000πDATA &H0000,&H00A8,&H00B4,&H0000,&H0500,&H1140,&HFFEF,&H00E0πDATA &H0000,&H0000,&H0000,&HFFEF,&H00E0,&H0000,&H0000,&H0000πDATA &HFFEF,&H00E0,&H0000,&H0000,&H0000,&HA812,&H0018,&H0000πDATA &H0000,&HAAE2,&HFF5F,&H0040,&H0000,&H0000,&H0000,&HFF5FπDATA &H0040,&H0000,&H0000,&H0000,&HFF5F,&H0040,&H0000,&H0000πDATA &H0000,&H00A0,&H00B0,&H0000,&H0000,&H4440,&HFFBF,&H0080πDATA &H0000,&H0000,&H0000,&HFFBF,&H0080,&H0000,&H0000,&H0000πDATA &HFFBF,&H0080,&H0000,&H0000,&H0000,&H2040,&H0060,&H0000πDATA &H0000,&HAA22,&HFDF7,&H0000,&H0000,&H0000,&H0000,&HFDF7πDATA &H0000,&H0000,&H0000,&H0000,&HFDF7,&H0000,&H0000,&H0000πDATA &H0000,&H0208,&H00C0,&H0000,&H0000,&H5001,&HFEFF,&H0080πDATA &H0000,&H0000,&H0000,&HFEFF,&H0080,&H0000,&H0000,&H0000πDATA &HFEFF,&H0080,&H0000,&H0000,&H0000,&H0900,&H0000,&H0000πDATA &H0000,&HAA02,&HFCFD,&H0000,&H0000,&H0000,&H0000,&HFCFDπDATA &H0000,&H0000,&H0000,&H0000,&HFCFD,&H0000,&H0000,&H0000πDATA &H0000,&H0302,&H0000,&H0000,&H0000,&H5401,&HF8FF,&H0000πDATA &H0000,&H0000,&H0000,&HF8FF,&H0000,&H0000,&H0000,&H0000πDATA &HF8FF,&H0000,&H0000,&H0000,&H0000,&H0600,&H0000,&H0000πDATA &H0000,&HAA02,&H40F5,&H0000,&H0000,&H0000,&H0000,&H40F5πDATA &H0000,&H0000,&H0000,&H0000,&H40F5,&H0000,&H0000,&H0000πDATA &H0000,&HBC0A,&H0000,&H0000,&H0000,&H1501,&H00E8,&H0000πDATA &H0000,&H0000,&H0000,&H00E8,&H0000,&H0000,&H0000,&H0000πDATA &H00E8,&H0000,&H0000,&H0000,&H0000,&HF817,&H0000,&H0000πDATA &H0000,&HAA00,&H4040,&H0000,&H0000,&H0000,&H0000,&H4040πDATA &H0000,&H0000,&H0000,&H0000,&H4040,&H0000,&H0000,&H0000πDATA &H0000,&HB0B5,&H0000,&H0000,&H0000,&H5400,&HA0A2,&H0000πDATA &H0000,&H0000,&H0000,&HA0A2,&H0000,&H0000,&H0000,&H0000πDATA &HA0A2,&H0000,&H0000,&H0000,&H0000,&H405D,&H0000,&H0000πDATA &H0000,&HAA00,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H0000,&HC0FF,&H0000,&H0000,&H0000,&H1000,&H00BE,&H0000πDATA &H0000,&H0000,&H0000,&H00BE,&H0000,&H0000,&H0000,&H0000πDATA &H00BE,&H0000,&H0000,&H0000,&H0000,&HC041,&H0000,&H0000πDATA &H0000,&HAA00,&H00F4,&H0000,&H0000,&H0000,&H0000,&H00F4πDATA &H0000,&H0000,&H0000,&H0000,&H00F4,&H0000,&H0000,&H0000πDATA &H0000,&H800B,&H0000,&H0000,&H0000,&H1400,&H00F8,&H0000πDATA &H0000,&H0000,&H0000,&H00F8,&H0000,&H0000,&H0000,&H0000πDATA &H00F8,&H0000,&H0000,&H0000,&H0000,&H8007,&H0000,&H0000πDATA &H0000,&H2A00,&H0074,&H0000,&H0000,&H0000,&H0000,&H0074πDATA &H0000,&H0000,&H0000,&H0000,&H0074,&H0000,&H0000,&H0000πDATA &H0000,&H008B,&H0000,&H0000,&H0000,&H0000,&H00FC,&H0000πDATA &H0000,&H0000,&H0000,&H00FC,&H0000,&H0000,&H0000,&H0000πDATA &H00FC,&H0000,&H0000,&H0000,&H0000,&H8003,&H0000,&H0000πDATA &H0000,&H2A00,&H00FC,&H0000,&H0000,&H0000,&H0000,&H00FCπDATA &H0000,&H0000,&H0000,&H0000,&H00FC,&H0000,&H0000,&H0000πDATA &H0000,&H0002,&H0400,&H0000,&H0000,&H0400,&H00FE,&H0000πDATA &H0000,&H0000,&H0000,&H00FE,&H0000,&H0000,&H0000,&H0000πDATA &H00FE,&H0000,&H0000,&H0000,&H0000,&H0020,&HAA02,&H0080πDATA &H0000,&H0A00,&H00F4,&H0000,&H0000,&H0000,&H0000,&H00F4πDATA &H0000,&H0000,&H0000,&H0000,&H00F4,&H0000,&H0000,&H0000πDATA &H0000,&H000A,&H5501,&H0040,&H0000,&H0100,&H00FC,&H0000πDATA &H0000,&H0000,&H0000,&H00FC,&H0000,&H0000,&H0000,&H0000πDATA &H00FC,&H0000,&H0000,&H0000,&H0000,&H0082,&HFF0F,&H00E8πDATA &H0000,&H0A00,&H00FC,&H0000,&H0000,&H0000,&H0000,&H00FCπDATA &H0000,&H0000,&H0000,&H0000,&H00FC,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HFF05,&H00FC,&H0000,&H0400,&H00F8,&H0200πDATA &H00A0,&H0000,&H0000,&H00F8,&H0200,&H00A0,&H0000,&H0000πDATA &H00F8,&H0200,&H00A0,&H0000,&H0000,&H0026,&HFD2F,&H005EπDATA &H0000,&H0A00,&H00F0,&H0100,&H0000,&H0000,&H0000,&H00F0πDATA &H0100,&H0000,&H0000,&H0000,&H00F0,&H0100,&H0000,&H0000πDATA &H0000,&H000C,&HFE17,&H00FE,&H0000,&H0100,&H00F8,&HAA00πDATA &H00E8,&H0000,&H0000,&H00F8,&HAA00,&H00E8,&H0000,&H0000πDATA &H00F8,&HAA00,&H00E8,&H0000,&H0000,&H0004,&H55BF,&H8016πDATA &H0000,&H0200,&H0040,&H5500,&H0050,&H0000,&H0000,&H0040πDATA &H5500,&H0050,&H0000,&H0000,&H0040,&H5500,&H0050,&H0000πDATA &H0000,&H00BC,&HAA5F,&H00AF,&H0000,&H0400,&H00A0,&HAA02πDATA &H00FA,&H0000,&H0000,&H00A0,&HAA02,&H00FA,&H0000,&H0000πDATA &H00A0,&HAA02,&H00FA,&H0000,&H0000,&H0058,&H55BD,&H8005πDATA &H0000,&H0200,&H0000,&H1500,&H0054,&H0000,&H0000,&H0000πDATA &H1500,&H0054,&H0000,&H0000,&H0000,&H1500,&H0054,&H0000πDATA &H0000,&H0054,&HEA5F,&H00AB,&H0000,&H0100,&H00E8,&HAF0AπDATA &H00EE,&H0000,&H0000,&H00E8,&HAF0A,&H00EE,&H0000,&H0000πDATA &H00E8,&HAF0A,&H00EE,&H0000,&H0000,&H0014,&H50B5,&H8011πDATA &H0000,&H0200,&H00D0,&H5500,&H0054,&H0000,&H0000,&H00D0πDATA &H5500,&H0054,&H0000,&H0000,&H00D0,&H5500,&H0054,&H0000πDATA &H0000,&H002C,&HAA5F,&H80AB,&H0000,&H0400,&H00F8,&HAB02πDATA &H00FA,&H0000,&H0000,&H00F8,&HAB02,&H00FA,&H0000,&H0000πDATA &H00F8,&HAB02,&H00FA,&H0000,&H0000,&H0000,&H54BD,&H8005πDATA &H0000,&H0200,&H00F0,&H1501,&H0055,&H0000,&H0000,&H00F0πDATA &H1501,&H0055,&H0000,&H0000,&H00F0,&H1501,&H0055,&H0000πDATA &H0000,&H000C,&HEA7E,&HC0AA,&H0000,&H0100,&H00F8,&HAF02πDATA &H80FE,&H0000,&H0000,&H00F8,&HAF02,&H80FE,&H0000,&H0000πDATA &H00F8,&HAF02,&H80FE,&H0000,&H0000,&H0080,&H50FD,&H6001πDATA &H0000,&H0200,&H00F0,&H5500,&H40FC,&H0000,&H0000,&H00F0πDATA &H5500,&H40FC,&H0000,&H0000,&H00F0,&H5500,&H40FC,&H0000πDATA &H0000,&H0008,&HAA5F,&H8003,&H0000,&H0000,&H00F8,&HAB02πDATA &H00FA,&H0000,&H0000,&H00F8,&HAB02,&H00FA,&H0000,&H0000πDATA &H00F8,&HAB02,&H00FA,&H0000,&H0000,&H0200,&H54BD,&HE005πDATA &H0000,&H0A00,&H00F0,&H1500,&H0055,&H0000,&H0000,&H00F0πDATA &H1500,&H0055,&H0000,&H0000,&H00F0,&H1500,&H0055,&H0000πDATA &H0000,&H000C,&HEA5F,&HF0AA,&H0000,&H0100,&H00F8,&HAE02πDATA &H00AA,&H0000,&H0000,&H00F8,&HAE02,&H00AA,&H0000,&H0000πDATA &H00F8,&HAE02,&H00AA,&H0000,&H0000,&H00A4,&H51BD,&HF855πDATA &H0000,&H0A00,&H00F0,&H5500,&H0000,&H0000,&H0000,&H00F0πDATA &H5500,&H0000,&H0000,&H0000,&H00F0,&H5500,&H0000,&H0000πDATA &H0000,&H004C,&HAA1F,&H04FD,&H0000,&H0500,&H00F8,&HAA00πDATA &H0000,&H0000,&H0000,&H00F8,&HAA00,&H0000,&H0000,&H0000πDATA &H00F8,&HAA00,&H0000,&H0000,&H0000,&H00AE,&H550F,&H2280πDATA &H0000,&H0A00,&H00FC,&H1000,&H0000,&H0000,&H0000,&H00FCπDATA &H1000,&H0000,&H0000,&H0000,&H00FC,&H1000,&H0000,&H0000πDATA &H0000,&H0110,&HEF01,&H0001,&H0000,&H0100,&H00FE,&HA800πDATA &H8000,&H0000,&H0000,&H00FE,&HA800,&H8000,&H0000,&H0000πDATA &H00FE,&HA800,&H8000,&H0000,&H0000,&H0BE8,&H57EB,&H7EFFπDATA &H8080,&H0A00,&H00FC,&H1400,&H4000,&H0000,&H0000,&H00FCπDATA &H1400,&H4000,&H0000,&H0000,&H00FC,&H1400,&H4000,&H0000πDATA &H0000,&H0543,&HEBD5,&HBDFF,&H0000,&H0000,&H00FE,&H2A00πDATA &HA002,&H0000,&H0000,&H00FE,&H2A00,&HA002,&H0000,&H0000πDATA &H00FE,&H2A00,&HA002,&H0000,&H0000,&H0AAB,&HD5AB,&H5FFDπDATA &H80AF,&H020A,&H00FF,&H1500,&H1000,&H0000,&H0000,&H00FFπDATA &H1500,&H1000,&H0000,&H0000,&H00FF,&H1500,&H1000,&H0000πDATA &H0000,&H0054,&H6A01,&H6FF1,&H00FF,&H010F,&H80FF,&H3E08πDATA &H0A80,&H00A8,&H0008,&H80FF,&H3E08,&H0A80,&H00A8,&H0008πDATA &H80FF,&H3E08,&H0A80,&H00A8,&H0008,&H08FE,&HC126,&H3569πDATA &H8057,&H0A07,&H80FF,&H1400,&H0000,&H0040,&H0004,&H80FFπDATA &H1400,&H0000,&H0040,&H0004,&H80FF,&H1400,&H0000,&H0040πDATA &H0004,&H0055,&H6B1C,&H47D8,&H00BF,&H005B,&H80FF,&H3A00πDATA &H0280,&H00A0,&H003A,&H80FF,&H3A00,&H0280,&H00A0,&H003AπDATA &H80FF,&H3A00,&H0280,&H00A0,&H003A,&H0ABF,&HC5BA,&H6D7AπDATA &H835F,&H02C5,&H00FF,&H1400,&H0000,&H0000,&H007C,&H00FFπDATA &H1400,&H0000,&H0000,&H007C,&H00FF,&H1400,&H0000,&H0000πDATA &H007C,&H8555,&H6B74,&HFFF5,&H01FF,&H0003,&H00FF,&H2A00πDATA &HEAA0,&H00A8,&H00BE,&H00FF,&H2A00,&HEAA0,&H00A8,&H00BEπDATA &H00FF,&H2A00,&HEAA0,&H00A8,&H00BE,&H8BFE,&HD5FA,&H155FπDATA &H8357,&H0041,&H00FF,&H1400,&H5440,&H0040,&H0054,&H00FFπDATA &H1400,&H5440,&H0040,&H0054,&H00FF,&H1400,&H5440,&H0040πDATA &H0054,&H05D4,&HEBD4,&HABBF,&H45BF,&H00AB,&H00FE,&H2A00πDATA &HBAAA,&H00A0,&H00EA,&H00FE,&H2A00,&HBAAA,&H00A0,&H00EAπDATA &H00FE,&H2A00,&HBAAA,&H00A0,&H00EA,&H2BFE,&HD5FA,&H4555πDATA &HA35F,&H0014,&H00FE,&H1100,&H5555,&H0000,&H0074,&H00FEπDATA &H1100,&H5555,&H0000,&H0074,&H00FE,&H1100,&H5555,&H0000πDATA &H0074,&H0754,&HEEF1,&HAAAA,&H07FF,&H008A,&H00FE,&HAF80πDATA &HFEFE,&H02A8,&H00E8,&H00FE,&HAF80,&HFEFE,&H02A8,&H00E8πDATA &H00FE,&HAF80,&HFEFE,&H02A8,&H00E8,&H2FFF,&H507B,&H0101πDATA &HAD57,&H0016,&H00FF,&H5500,&HDD5D,&H0140,&H00D4,&H00FFπDATA &H5500,&HDD5D,&H0140,&H00D4,&H00FF,&H5500,&HDD5D,&H0140πDATA &H00D4,&H1F54,&HAAF5,&H22A2,&H46BF,&H0028,&H82FF,&HABA0πDATA &HFFFF,&H00A0,&H00A8,&H82FF,&HABA0,&HFFFF,&H00A0,&H00A8πDATA &H82FF,&HABA0,&HFFFF,&H00A0,&H00A8,&H2DB8,&H545B,&H0000πDATA &HAF5F,&H0056,&H81FD,&H5101,&HF57F,&H0000,&H0000,&H81FDπDATA &H5101,&HF57F,&H0000,&H0000,&H81FD,&H5101,&HF57F,&H0000πDATA &H0000,&H5E53,&HAEF6,&H0A80,&H55FF,&H00FC,&HCAFF,&HEAE2πDATA &HFEFB,&H00A0,&H00E0,&HCAFF,&HEAE2,&HFEFB,&H00A0,&H00E0πDATA &HCAFF,&HEAE2,&HFEFB,&H00A0,&H00E0,&HB5E8,&H151D,&H0104πDATA &HEF5F,&H0018,&HC5FD,&HD441,&HFD5F,&H0540,&H0040,&HC5FDπDATA &HD441,&HFD5F,&H0540,&H0040,&HC5FD,&HD441,&HFD5F,&H0540πDATA &H0040,&H1A52,&H2BB6,&H02A0,&H52BD,&H00B0,&H83FF,&HFE83πDATA &HFA3F,&H03A0,&H00A0,&H83FF,&HFE83,&HFA3F,&H03A0,&H00A0πDATA &H83FF,&HFE83,&HFA3F,&H03A0,&H00A0,&HBCA8,&H017C,&H05C0πDATA &HAC5F,&H0250,&H01FD,&H5F01,&HF556,&H0500,&H0040,&H01FDπDATA &H5F01,&HF556,&H0500,&H0040,&H01FD,&H5F01,&HF556,&H0500πDATA &H0040,&H9E52,&HA0D6,&H0AA9,&H52FF,&H00A0,&H02FF,&HEF80πDATA &HFEFF,&H03A0,&H0080,&H02FF,&HEF80,&HFEFF,&H03A0,&H0080πDATA &H02FF,&HEF80,&HFEFF,&H03A0,&H0080,&HADA8,&H107F,&H0100πDATA &HAC5F,&H0A60,&H04FD,&H1C00,&HFD75,&H0040,&H0000,&H04FDπDATA &H1C00,&HFD75,&H0040,&H0000,&H04FD,&H1C00,&HFD75,&H0040πDATA &H0000,&H1B52,&HE3D5,&H028A,&H47BD,&H0080,&H02FE,&H3F00πDATA &HFFFB,&H00A0,&H0000,&H02FE,&H3F00,&HFFFB,&H00A0,&H0000πDATA &H02FE,&H3F00,&HFFFB,&H00A0,&H0000,&H0DA9,&HC0BF,&H0004πDATA &HAE5F,&H0000,&H00FC,&H1700,&H7555,&H0000,&H0000,&H00FCπDATA &H1700,&H7555,&H0000,&H0000,&H00FC,&H1700,&H7555,&H0000πDATA &H0000,&H0753,&HE817,&H8AAA,&H04FF,&H0000,&H00FE,&HAF00πDATA &HFEEF,&H00E8,&H0000,&H00FE,&HAF00,&HFEEF,&H00E8,&H0000πDATA &H00FE,&HAF00,&HFEEF,&H00E8,&H0000,&H0FE8,&H50AF,&H0110πDATA &H8C16,&H0000,&H00FC,&H5500,&H5554,&H0040,&H0000,&H00FCπDATA &H5500,&H5554,&H0040,&H0000,&H00FC,&H5500,&H5554,&H0040πDATA &H0000,&H0752,&HAA05,&HAAAB,&H04BD,&H0000,&H00FA,&HAA00πDATA &HFBAA,&H00A0,&H0000,&H00FA,&HAA00,&HFBAA,&H00A0,&H0000πDATA &H00FA,&HAA00,&HFBAA,&H00A0,&H0000,&H0FAC,&H558B,&H0455πDATA &HA85E,&H2200,&H00FC,&H1500,&H7140,&H0050,&H0000,&H00FCπDATA &H1500,&H7140,&H0050,&H0000,&H00FC,&H1500,&H7140,&H0050πDATA &H0000,&H0752,&HEA41,&H8EB5,&H10AD,&H0000,&H00FE,&H2A00πDATA &HFF00,&H00E8,&H0000,&H00FE,&H2A00,&HFF00,&H00E8,&H0000πDATA &H00FE,&H2A00,&HFF00,&H00E8,&H0000,&H0FE8,&HD5EB,&H00FFπDATA &HA816,&HBF00,&H00FC,&H0400,&H5500,&H0040,&H0700,&H00FCπDATA &H0400,&H5500,&H0040,&H0700,&H00FC,&H0400,&H5500,&H0040πDATA &H0700,&H0752,&HFBD7,&HAAFD,&H10BC,&H7800,&H00FA,&HBF02πDATA &HFFA8,&H00A0,&H2F00,&H00FA,&HBF02,&HFFA8,&H00A0,&H2F00πDATA &H00FA,&HBF02,&HFFA8,&H00A0,&H2F00,&H03A4,&H40AD,&H0057πDATA &H385A,&HD200,&H00F8,&H7F01,&H5555,&H0000,&H1700,&H00F8πDATA &H7F01,&H5555,&H0000,&H1700,&H00F8,&H7F01,&H5555,&H0000πDATA &H1700,&H0156,&H8016,&HAAAA,&H50F4,&H6800,&H00FA,&HFF00πDATA &HFEEE,&H00A0,&H0F00,&H00FA,&HFF00,&HFEEE,&H00A0,&H0F00πDATA &H00FA,&HFF00,&HFEEE,&H00A0,&H0F00,&H00E4,&H00AF,&H0111πDATA &HE05A,&HF000,&H00FE,&H5500,&HDD55,&H0000,&H1700,&H00FEπDATA &H5500,&HDD55,&H0000,&H1700,&H00FE,&H5500,&HDD55,&H0000πDATA &H1700,&H0041,&HAA57,&H22AA,&HD0F5,&H6800,&H00FA,&H2B00πDATA &HFAFF,&H0080,&H0F00,&H00FA,&H2B00,&HFAFF,&H0080,&H0F00πDATA &H00FA,&H2B00,&HFAFF,&H0080,&H0F00,&H00A5,&HD4AF,&H0500πDATA &HE07B,&HF200,&H00F6,&H1500,&H5457,&H0000,&H1700,&H00F6πDATA &H1500,&H5457,&H0000,&H1700,&H00F6,&H1500,&H5457,&H0000πDATA &H1700,&H0049,&HEA17,&HABA8,&HD0D7,&H6800,&H00FE,&HAF00πDATA &HEAFF,&H800A,&H0F00,&H00FE,&HAF00,&HEAFF,&H800A,&H0F00πDATA &H00FE,&HAF00,&HEAFF,&H800A,&H0F00,&H80E1,&H50AF,&H1500πDATA &H68E5,&HF200,&H00FE,&H5D00,&H545D,&H0004,&H0700,&H00FEπDATA &H5D00,&H545D,&H0004,&H0700,&H00FE,&H5D00,&H545D,&H0004πDATA &H0700,&H0041,&HA217,&HABA2,&HC4DB,&H7800,&H00FF,&HBF00πDATA &HA8FA,&H002A,&H0F00,&H00FF,&HBF00,&HA8FA,&H002A,&H0F00πDATA &H00FF,&HBF00,&HA8FA,&H002A,&H0F00,&H00A2,&H402F,&H5705πDATA &HEED5,&HB200,&H00F7,&H5700,&H0055,&H0415,&H1700,&H00F7πDATA &H5700,&H0055,&H0415,&H1700,&H00F7,&H5700,&H0055,&H0415πDATA &H1700,&H0048,&HA815,&HFDAA,&HDAEA,&H6800,&H00FF,&HBF00πDATA &H80FE,&H9EFE,&H0F00,&H00FF,&HBF00,&H80FE,&H9EFE,&H0F00πDATA &H00FF,&HBF00,&H80FE,&H9EFE,&H0F00,&H80E0,&H400F,&H7F01πDATA &H6801,&HF000,&H00F7,&H5500,&H01D4,&H7CFC,&H0700,&H00F7πDATA &H5500,&H01D4,&H7CFC,&H0700,&H00F7,&H5500,&H01D4,&H7CFCπDATA &H0700,&H0048,&HAA05,&HDE2B,&H9303,&H7800,&H00FF,&H2B00πDATA &H03F8,&HFEFA,&H0F00,&H00FF,&H2B00,&H03F8,&HFEFA,&H0F00πDATA &H00FF,&H2B00,&H03F8,&HFEFA,&H0F00,&H80A2,&HD403,&HFC07πDATA &H2905,&H3000,&H00F7,&H0100,&H1740,&HFDF7,&H0700,&H00F7πDATA &H0100,&H1740,&HFDF7,&H0700,&H00F7,&H0100,&H1740,&HFDF7πDATA &H0700,&H0048,&H7E01,&H68BD,&H5209,&H1800,&H80FF,&H0200πDATA &HBF80,&HFFFF,&H0F00,&H80FF,&H0200,&HBF80,&HFFFF,&H0F00πDATA &H80FF,&H0200,&HBF80,&HFFFF,&H0F00,&H00EA,&HFD00,&H406FπDATA &HE80F,&H3080,&H00FF,&H0000,&H5F01,&HFFFF,&H0700,&H00FFπDATA &H0000,&H5F01,&HFFFF,&H0700,&H00FF,&H0000,&H5F01,&HFFFFπDATA &H0700,&H8040,&H0000,&HA05E,&HD40F,&H5880,&H80FF,&H0000πDATA &HFF2B,&HFFFF,&H0F80,&H80FF,&H0000,&HFF2B,&HFFFF,&H0F80πDATA &H80FF,&H0000,&HFF2B,&HFFFF,&H0F80,&H00A2,&HA203,&H00D4πDATA &HFA3F,&H3240,&H80FF,&H0001,&H7F15,&HFFFF,&H0700,&H80FFπDATA &H0001,&H7F15,&HFFFF,&H0700,&H80FF,&H0001,&H7F15,&HFFFFπDATA &H0700,&H0040,&H5102,&H806A,&H547F,&H18C0,&H80FF,&H0002πDATA &HFFAF,&HFFFF,&H0FC0,&H80FF,&H0002,&HFFAF,&HFFFF,&H0FC0πDATA &H80FF,&H0002,&HFFAF,&HFFFF,&H0FC0,&H80CA,&HFB01,&H0350πDATA &HFEFF,&H32A0,&H80FF,&H0001,&HFF55,&HFFFF,&H07C0,&H80FFπDATA &H0001,&HFF55,&HFFFF,&H07C0,&H80FF,&H0001,&HFF55,&HFFFFπDATA &H07C0,&H4040,&H7D02,&H05AA,&HD4FD,&H1800,&H80FF,&H8001πDATA &HFFBF,&HFFFF,&H02C0,&H80FF,&H8001,&HFFBF,&HFFFF,&H02C0πDATA &H80FF,&H8001,&HFFBF,&HFFFF,&H02C0,&H4082,&H3F02,&H3F40πDATA &HFAFF,&H3DA0,&H80DF,&H0001,&HFF57,&HFFFF,&H00C0,&H80DFπDATA &H0001,&HFF57,&HFFFF,&H00C0,&H80DF,&H0001,&HFF57,&HFFFFπDATA &H00C0,&H4020,&HFF02,&H3FA8,&HF5F7,&H1000,&HC0FF,&HC800πDATA &HFFAF,&HFFFF,&H00E0,&HC0FF,&HC800,&HFFAF,&HFFFF,&H00E0πDATA &HC0FF,&HC800,&HFFAF,&HFFFF,&H00E0,&H808A,&H3703,&HFF50πDATA &HFEFF,&H0A98πDATA &H0040,&H0009,&HFFC0,&HFFFF,&H3FFC,&HFFFF,&H0000,&H0000πDATA &H0000,&H0000,&H003F,&H0000,&HC003,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HFF80,&HFFFF,&H1FF8,&HFFFF,&H0000,&H0000πDATA &H0000,&H0000,&H007F,&H0000,&HE007,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HC13F,&H7000,&HC9F3,&H7098,&H0000,&H0000πDATA &H0000,&H0000,&H3EC0,&H8FFF,&H360C,&H8F67,&H0000,&H0000πDATA &H0000,&H0000,&H813F,&H2000,&HC973,&H2090,&H0000,&H0000πDATA &H0000,&H0000,&H7EC0,&HDFFF,&H368C,&HDF6F,&H0000,&H0000πDATA &H0000,&H0000,&H9930,&H2633,&HC973,&H2793,&H0000,&H0000πDATA &H0000,&H0000,&H66CF,&HD9CC,&H368C,&HD86C,&H0000,&H0000πDATA &H0000,&H0000,&H9930,&H2433,&HC973,&H2792,&H0000,&H0000πDATA &H0000,&H0000,&H66CF,&HDBCC,&H368C,&HD86D,&H0000,&H0000πDATA &H0000,&H0000,&H993C,&H2733,&HC9F3,&HE713,&H0000,&H0000πDATA &H0000,&H0000,&H66C3,&HD8CC,&H360C,&H18EC,&H0000,&H0000πDATA &H0000,&H0000,&H8980,&H2033,&H18F8,&H6730,&H0000,&H0000πDATA &H0000,&H0000,&H767F,&HDFCC,&HE707,&H98CF,&H0000,&H0000πDATA &H0000,&H0000,&HC9C1,&H3033,&H3CFC,&H6778,&H0000,&H0000πDATA &H0000,&H0000,&H363E,&HCFCC,&HC303,&H9887,&H0000,&H0000πDATA &H0000,&H0000πDATA "Hello everyone!"πDATA ""πDATA "Everyone thought I was stingy for not"πDATA "letting anyone see my source code, so"πDATA "I finnaly did it.  Even though I made"πDATA "this little game in Qb 4.5, I left it"πDATA "uncompiled for your enjoyment."πDATA ""πDATA "The only reason I'm letting you guys"πDATA "see this one is becuase I learned much"πDATA "by looking at everyone else's code so"πDATA "I thought it only fair."πDATA ""πDATA "The program structure is really crappy"πDATA "on this I know.  There are tons of"πDATA "optimizations you could probably do,"πDATA "but why even try?"πDATA ""πDATA "This game is pretty cool, considering"πDATA "the time it took to make it."πDATA "I did this in a week starting May 19."πDATA "I decided I was too cool for the"πDATA "freshman class trip so I got stuck here"πDATA "sitting in front of the computer."πDATA "So, I erased C++, re-installed Qb 4.5"πDATA "and I went to work on a game where"πDATA "shrapnel flies left and right."πDATA ""πDATA "Balloon X is the sequel to"πDATA "Balloon X.O.G, which had Adlib sound."πDATA "Why did I change it?  Well, the"πDATA "original (O.G.) was made with all the"πDATA "things you could only do with Qb 4.5."πDATA "I decided to make one for the Qbasic"πDATA "kids.  HE HE!"πDATA ""πDATA "Sorry it's so big."πDATA ""πDATA "If any of you guys want to make a"πDATA "game with me in Basic, C, or Pas,"πDATA "let me know."πDATA "I'm getting really bored."πDATA ""πDATA "Manny Najera"πDATA "Collect 2 Gems"πDATA "Collect 4 Gems"πDATA "Collect 6 Gems"πDATA "Collect 8 Gems"πDATA "Collect 10 Gems"πDATA &H0005,&H0008,&H1010,&H1010,&H2828,&H2828,&H2020,&H2020πDATA &H0000,&H7100,&H1010,&HEB10,&H0000,&HFB00,&H0000,&HFB00πDATA &H0000,&H7100πDATA &H0005,&H0008,&HEBEB,&HEBEB,&HD3D3,&HD3D3,&HDBDB,&HDBDBπDATA &H8A8A,&H8A8A,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8A8A,&H8A8AπDATA &H0005,&H0008,&H1010,&H1010,&H2020,&H2020,&H2020,&H2020πDATA &H0000,&H7100,&H1010,&HEB10,&H0000,&HFB00,&H0000,&HFB00πDATA &H0000,&H7100πDATA &H0005,&H0008,&HEBEB,&HEBEB,&HDBDB,&HDBDB,&HDBDB,&HDBDBπDATA &H8A8A,&H8A8A,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8A8A,&H8A8AπDATA &H0005,&H0008,&H0000,&H0000,&H2020,&H2020,&H2020,&H2020πDATA &H0000,&H7100,&H1010,&HEB10,&H0000,&HFB00,&H0000,&HFB00πDATA &H0000,&H7100πDATA &H0005,&H0008,&HFBFB,&HFBFB,&HDBDB,&HDBDB,&HDBDB,&HDBDBπDATA &H8A8A,&H8A8A,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8A8A,&H8A8AπDATA &H0005,&H0008,&H0000,&H0000,&H0000,&H0000,&H2020,&H2020πDATA &H0000,&H7000,&H1010,&HE810,&H0000,&HF800,&H0000,&HF800πDATA &H0000,&H7000πDATA &H0005,&H0008,&HF8F8,&HF8F8,&HF8F8,&HF8F8,&HD8D8,&HD8D8πDATA &H8888,&H8888,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8888,&H8888πDATA &H0042,&H0009,&HFF3F,&HFCFF,&H13F8,&HFFFF,&H00FF,&H0000πDATA &H0000,&H0000,&H0000,&H00C0,&H0300,&HEC07,&H0000,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&HFF3F,&HFCFF,&H13F0,&HFFFFπDATA &H00FF,&H0000,&H0000,&H0000,&H0000,&H00C0,&H0300,&HEC0FπDATA &H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&HC33F,&H0C33πDATA &HF3E7,&H0C0E,&H003F,&H0000,&H0000,&H0000,&H0000,&H3CC0πDATA &HF3CC,&H0C18,&HF3F1,&H00C0,&H0000,&H0000,&H0000,&H0000πDATA &H813F,&H0432,&HF2E7,&H0804,&H003F,&H0000,&H0000,&H0000πDATA &H0000,&H7EC0,&HFBCD,&H0D18,&HF7FB,&H00C0,&H0000,&H0000πDATA &H0000,&H0000,&H993F,&H6432,&HF2E7,&HC964,&H00FF,&H0000πDATA &H0000,&H0000,&H0000,&H66C0,&H9BCD,&H0D18,&H369B,&H0000πDATA &H0000,&H0000,&H0000,&H0000,&H913F,&H4432,&HF2E7,&HC944πDATA &H00FF,&H0000,&H0000,&H0000,&H0000,&H6EC0,&HBBCD,&H0D18πDATA &H36BB,&H0000,&H0000,&H0000,&H0000,&H0000,&H9F3F,&H7C22πDATA &HF2E7,&HC97C,&H00FF,&H0000,&H0000,&H0000,&H0000,&H60C0πDATA &H83DD,&H0D18,&H3683,&H0000,&H0000,&H0000,&H0000,&H0000πDATA &H8380,&H0C06,&H12F0,&H490C,&H00FF,&H0000,&H0000,&H0000πDATA &H0000,&H7C7F,&HF3F9,&HED0F,&HB6F3,&H0000,&H0000,&H0000πDATA &H0000,&H0000,&HC3C0,&H0C8F,&H13F8,&H490E,&H00FF,&H0000πDATA &H0000,&H0000,&H0000,&H3C3F,&HF370,&HEC07,&HB6F1,&H0000πDATA &H0000,&H0000,&H0000,&H0000ππREM $STATICπFUNCTION BoxHit% (Hx1, Hy1, hx2, hy2)ππBhx = Bal.X + 7πBhy = Bal.Y + 7ππIF Bal.X > Hx1 AND Bhx < hx2 AND Bhy > Hy1 AND Bal.Y < hy2 THENπBoxHit% = 1πGOTO EBoxπEND IFππBoxHit% = 0πEBox:πEND FUNCTIONππSUB Center (Row, Text$, C)πCOLOR CπLOCATE Row, 21 - (LEN(Text$) / 2)πPRINT Text$πCOLOR 15πEND SUBππSUB CreateTableπFOR I = 1 TO 360πXSin(I) = SIN(I)πXcos(I) = COS(I)πNEXTπEND SUBππSUB DeadDuckπFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπCOLOR 15, 1πSCREEN 7, 0, 2, 0πCLSπLINE (0, 0)-(319, 199), 1, BFπPUT (160 - 32, 100), Gop, PSETπPCOPY 2, 0πA$ = INPUT$(1)πSCREEN 7, 0, 0, 2πCOLOR 15, 0πMakeTitleScreenπDoMenuπEND SUBππSUB DoBItemππFOR I = 1 TO 5ππIF BItem(I).Active = 0 THENπBItem(I).Clock = BItem(I).Clock + 1πEND IFπππIF BItem(I).Clock = 50 THENπBItem(I).X = Fnr(290) + 10πBItem(I).Y = 11πBItem(I).Ym = Fnr(3) + 3πBItem(I).Active = 1πBItem(I).num = Fnr(2)πBItem(I).Clock = Fnr(30)πEND IFππIF BItem(I).Active = 1 THENπBItem(I).Y = BItem(I).Y + BItem(I).YmπEND IFππIF BItem(I).Y > 180 THENπBItem(I).Active = 0πBItem(I).Y = 300πEND IFππIF BItem(I).Active = 1 THENπSELECT CASE BItem(I).numπCASE 1πPUT (BItem(I).X, BItem(I).Y), P1, PSETπCASE 2πPUT (BItem(I).X, BItem(I).Y), P5, PSETπEND SELECTπIF BoxHit%(BItem(I).X - 5, BItem(I).Y - 5, BItem(I).X + 15, BItem(I).Y + 10) = 1 THENπBItem(I).Active = 0πSELECT CASE BItem(I).numπCASE 1πCurrent.Score = Current.Score + 100πCASE 2πCurrent.Score = Current.Score + 500πEND SELECTπEND IFπEND IFππNEXTππEND SUBππSUB DoBomb (lev)ππFOR I = 1 TO levππBomb(I).Clock = Bomb(I).Clock + 1ππIF Bomb(I).Anclock < 21 THEN Bomb(I).AnFlag = 1πIF Bomb(I).Anclock > 20 AND Bomb(I).Anclock < 41 THEN Bomb(I).AnFlag = 2πIF Bomb(I).Anclock > 40 AND Bomb(I).Anclock < 61 THEN Bomb(I).AnFlag = 3πIF Bomb(I).Anclock > 60 AND Bomb(I).Anclock < 81 THEN Bomb(I).AnFlag = 4ππππIF Bomb(I).Active = 0 THENπBomb(I).Anclock = Bomb(I).Anclock + 1πSELECT CASE Bomb(I).AnFlagπCASE 1πPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb1m, ANDπPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb1, XORπCASE 2πPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb2m, ANDπPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb2, XORπCASE 3πPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb3m, ANDπPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb3, XORπCASE 4πPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb4m, ANDπPUT (Bomb(I).Sx, Bomb(I).Sy), Bomb4, XORπEND SELECTπEND IFππIF Bomb(I).Rclock = 200 THENπBomb(I).Anclock = 0πBomb(I).AnFlag = 1πBomb(I).Active = 0πBomb(I).Rclock = 0πBomb(I).Clock = 0πBomb(I).Sx = Fnr(300) + 10πBomb(I).Sy = Fnr(180) + 11πEND IFππIF Bomb(I).Clock = 80 THENπBomb(I).Active = 1πEND IFππIF Bomb(I).Active = 1 THENπBomb(I).Rclock = Bomb(I).Rclock + 4πFOR T = 1 TO 40 STEP 2πBomb(I).Fx = Bomb(I).Sx + Xcos(T) * Bomb(I).RclockπBomb(I).Fy = Bomb(I).Sy + XSin(T) * Bomb(I).RclockπIF Bomb(I).Fx < 0 OR Bomb(I).Fx > 320 OR Bomb(I).Fy < 11 OR Bomb(I).Fy > 198 THEN GOTO ClipπPSET (Bomb(I).Fx, Bomb(I).Fy), 14πIF PointHit%(Bomb(I).Fx, Bomb(I).Fy) = 1 THENπBal.Dead = 1πBal.Dx = Bal.XπBal.Dy = Bal.YπEND IFπClip:πNEXTπEND IFππNEXTππEND SUBππSUB DoCheapEndingπSCREEN 7, 0, 7, 0πMakeStars 300πScsc$ = "Final Score:" + STR$(Current.Score)πCenter 2, "YOU WON?", 15πCenter 4, "To tell you the truth...", 3πCenter 6, "I can't even get past level 2.", 5πCenter 10, "Look man...", 8πCenter 12, "This game has no plot,", 2πCenter 14, "Therefore it can have no ending.", 2πCenter 17, "Just remember,", 9πCenter 20, "The spirit of Balloon X is in YOU!", 15πCenter 23, Scsc$, 14πFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπPCOPY 7, 1πFOR T = 120 TO -4 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOP UNTIL INKEY$ <> ""πFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπMakeTitleScreenπDoMenuπEND SUBππSUB DoDemoModeππFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππPCOPY 3, 1πSCREEN 7, 0, 1, 1ππFOR T = 120 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππDl = 0ππDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πDl = Dl + 1πIF Dl = 600 THENπDl = 0πEXIT DOπEND IFπCenter 13, "Demo Mode", 15πDoTorpedo 3πDoMissle 3πDoBomb 2πDoItemπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOP UNTIL INKEY$ <> ""πFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπMakeTitleScreenπDoMenuπEND SUBππSUB DoExitπFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπSCREEN 7, 0, 1, 0πCLSπMakeStars 300πCenter 5, "- Programming -", 15πCenter 8, "Manny Najera", 4πCenter 11, "- Graphics -", 15πCenter 14, "Manny Najera", 9πCenter 17, "- Game Design -", 15πCenter 20, "Manny Najera", 12πFOR T = 120 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOP UNTIL INKEY$ <> ""πENDπEND SUBππSUB DoIntroπA$ = INPUT$(1)πLINE (ManX, ManY)-(ManX + 54, ManY + 27), 0, BFπFOR T = 1 TO 200 STEP 5πSCREEN 7, 0, 2, 0: PCOPY 1, 2πFOR N = 1 TO 40 STEP 2πPSET (ManX + 20 + XSin(N) * T, ManY + 13 + Xcos(N) * T), 9πPSET (ManX + 20 + XSin(N) * 2 * T, ManY + 13 + Xcos(N) * N), 12πPSET (ManX + 20 + XSin(N) * N, ManY + 13 + Xcos(N) * 2 * T), 1πNEXTπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπEND SUBππSUB DoItemπππIF Item.Active = 0 THENπItem.ActCount = Item.ActCount + 1πItem.X = 500πEND IFππIF Item.ActCount = 200 THENπItem.Active = 1πItem.X = Fnr(290) + 10πItem.Y = Fnr(170) + 11πItem.num = Fnr(4)πItem.EndCount = 0πItem.ActCount = 0πEND IFπ                 'w13 h7πIF BoxHit%(Item.X, Item.Y, Item.X + 15, Item.Y + 10) = 1 THENπItem.X = 400πSELECT CASE Item.numπCASE 1πCurrent.Score = Current.Score + 100πCASE 2πCurrent.Score = Current.Score + 500πCASE 3πCurrent.Gems = Current.Gems + 1πCASE 4πCurrent.Lives = Current.Lives + 1πEND SELECTπItem.EndCount = 100πItem.Active = 0πEND IFππIF Item.Active = 1 THENπItem.EndCount = Item.EndCount + 1πSELECT CASE Item.numπCASE 1πPUT (Item.X, Item.Y), P1, PSETπCASE 2πPUT (Item.X, Item.Y), P5, PSETπCASE 3πPUT (Item.X, Item.Y), Icon, PSETπCASE 4πPUT (Item.X, Item.Y), Coin1, PSETπEND SELECTππIF BoxHit%(Item.X, Item.Y, Item.X + 13, Item.Y + 7) = 1 THENπItem.X = 400πSELECT CASE Item.numπCASE 1πCurrent.Score = Current.Score + 100πCASE 2πCurrent.Score = Current.Score + 500πCASE 3πCurrent.Gems = Current.Gems + 1πCASE 4πCurremt.Lives = Current.Lives + 1πEND SELECTπItem.EndCount = 100πItem.X = 500πItem.Active = 0πEND IFπEND IFππIF Item.EndCount = 100 THEN Item.Active = 0πEND SUBππSUB DoMenuπMenu.Clock = 0πDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πMenu.Clock = Menu.Clock + 1πIF Menu.Clock = 400 THENπMenu.Clock = 0πDrawArenaπDoDemoModeπEND IFπChoice$ = UCASE$(INKEY$)πSELECT CASE Choice$πCASE CHR$(0) + CHR$(72)πMenu.num = Menu.num - 1πIF Menu.num < 1 THEN Menu.num = 1πCASE CHR$(0) + CHR$(80)πMenu.num = Menu.num + 1πIF Menu.num > 3 THEN Menu.num = 3πCASE CHR$(13)πGOTO ProChoiceπEND SELECTπSELECT CASE Menu.numπCASE 1πPUT (100, 111), Iconm, ANDπPUT (100, 111), Icon, XORπCASE 2πPUT (100, 143), Iconm, ANDπPUT (100, 143), Icon, XORπCASE 3πPUT (100, 175), Iconm, ANDπPUT (100, 175), Icon, XORπEND SELECTπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOPπProChoice:πSELECT CASE Menu.numπCASE 1πCurrent.Gems = 0πCurrent.Level = 1πCurrent.Score = 0πStartGameπCASE 2πSeeInfoπCASE 3πDoExitπEND SELECTπEND SUBππSUB DoMissle (lev)ππFOR I = 1 TO 3 + levππIF Missle(I).Active = 0 THENπMissle(I).ActCount = Missle(I).ActCount + 1πEND IFππIF Missle(I).ActCount = 100 AND Missle(I).Active = 0 THENπMissle(I).Active = 1πMissle(I).Y = Fnr(180) + 10πMissle(I).Xm = Fnr(6)πMissle(I).X = 3πEND IFππIF Missle(I).Active = 1 THENπMissle(I).X = Missle(I).X + Missle(I).XmπPUT (Missle(I).X, Missle(I).Y), Mrm, ANDπPUT (Missle(I).X, Missle(I).Y), Mr, XORπIF BoxHit%(Missle(I).X, Missle(I).Y, Missle(I).X + 10, Missle(I).Y + 10) = 1 THENπBal.Dead = 1πBal.Dx = Bal.XπBal.Dy = Bal.YπEND IFπIF Missle(I).X > 300 THENπMissle(I).Active = 0πMissle(I).ActCount = 0πEND IFπEND IFπNEXTπEND SUBππSUB DoTorpedo (lev)ππFOR I = 1 TO 2 + levππIF Tor(I).Active = 0 THENπTor(I).ActCount = Tor(I).ActCount + 1πEND IFππIF Tor(I).ActCount = 100 AND Tor(I).Active = 0 THENπTor(I).LoCount = Fnr(140) + 10πTor(I).Count = 0πTor(I).ActCount = 0πTor(I).Active = 1πTor(I).Ecount = 0πTor(I).X = Fnr(180) + 10πTor(I).Y = 185πTor(I).Ym = -1πTor(I).Ex = Fnr(130) + 50πEND IFππIF Tor(I).Active = 1 THENπTor(I).Count = Tor(I).Count + 1πTor(I).Y = Tor(I).Y + Tor(I).YmπIF Tor(I).Y < 11 THEN Tor(I).Active = 0πIF Tor(I).Exploding = 0 THENπPUT (Tor(I).X, Tor(I).Y), Torpm, ANDπPUT (Tor(I).X, Tor(I).Y), Torp, XORπEND IFπππIF Tor(I).Count = Tor(I).LoCount AND Tor(I).Exploding = 0 AND Tor(I).Ecount = 0 AND Tor(I).Active = 1 THENπTor(I).Exx = Tor(I).XπTor(I).Eyy = Tor(I).YπTor(I).Exploding = 1πEND IFππIF Tor(I).Exploding = 1 AND Tor(I).Active = 1 THENπTor(I).Ecount = Tor(I).Ecount + 5πFOR T = 1 TO 6πTor(I).Fx = Tor(I).Exx + XSin(T) * Tor(I).EcountπTor(I).Fy = Tor(I).Eyy + Xcos(T) * Tor(I).EcountπIF Tor(I).Fx < 0 OR Tor(I).Fx > 320 OR Tor(I).Fy < 11 OR Tor(I).Fy > 198 THEN GOTO TClipπPSET (Tor(I).Fx, Tor(I).Fy), 14πIF PointHit%(Tor(I).Fx, Tor(I).Fy) THENπBal.Dead = 1πBal.Dx = Bal.XπBal.Dy = Bal.YπEND IFπTClip:πNEXTπIF Tor(I).Ecount > 200 THENπTor(I).ActCount = 0πTor(I).Active = 0πTor(I).Exploding = 0πTor(I).Exx = -200πTor(I).Eyy = -200πEND IFπEND IFπEND IFππNEXTπEND SUBππSUB DrawArenaπSCREEN 7, 0, 3, 0πCLSπMakeStars 300πLINE (0, 0)-(319, 10), 0, BFπPUT (0, 0), Score, PSETπLINE (0, 11)-(319, 199), 15, BπLINE (1, 12)-(318, 198), 7, BπLINE (2, 13)-(317, 197), 8, BπLOCATE 1, 1: PRINT "Score:"πLOCATE 1, 14: PRINT "Lives:"πLOCATE 1, 27: PRINT "Gems:"πEND SUBππSUB DrawBalloonππIF Bal.Dead = 1 THENπBal.DeadClock = Bal.DeadClock + 5πIF Bal.DeadClock = 100 THENπBal.DeadClock = 0πCurrent.Lives = Current.Lives - 1πBal.Dead = 0πEND IFπIF Current.Lives = -1 THEN DeadDuckπFOR T = 1 TO 40 STEP 2πPSET (Bal.Dx + XSin(T) * Bal.DeadClock, Bal.Dy + Xcos(T) * Bal.DeadClock), 4πNEXTπIF Current.Lives = 0 THEN GOTO FinishdrawπEND IFπππIF Bal.Anclock = 80 THEN Bal.Anclock = 0πIF Bal.Anclock < 80 THEN Bal.Anclock = Bal.Anclock + 1πIF Bal.Anclock > 0 AND Bal.Anclock < 11 THENπBal.AnFlag = 1πPUT (Bal.X, Bal.Y), Bal1m, ANDπPUT (Bal.X, Bal.Y), Bal1, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 10 AND Bal.Anclock < 21 THENπBal.AnFlag = 2πPUT (Bal.X, Bal.Y), Bal2m, ANDπPUT (Bal.X, Bal.Y), Bal2, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 20 AND Bal.Anclock < 31 THENπBal.AnFlag = 3πPUT (Bal.X, Bal.Y), Bal3m, ANDπPUT (Bal.X, Bal.Y), Bal3, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 30 AND Bal.Anclock < 41 THENπBal.AnFlag = 4πPUT (Bal.X, Bal.Y), Bal4m, ANDπPUT (Bal.X, Bal.Y), Bal4, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 40 AND Bal.Anclock < 51 THENπBal.AnFlag = 5πPUT (Bal.X, Bal.Y), Bal5m, ANDπPUT (Bal.X, Bal.Y), Bal5, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 50 AND Bal.Anclock < 61 THENπBal.AnFlag = 4πPUT (Bal.X, Bal.Y), Bal4m, ANDπPUT (Bal.X, Bal.Y), Bal4, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 60 AND Bal.Anclock < 71 THENπBal.AnFlag = 3πPUT (Bal.X, Bal.Y), Bal3m, ANDπPUT (Bal.X, Bal.Y), Bal3, XORπGOTO FinishdrawπEND IFπIF Bal.Anclock > 70 AND Bal.Anclock < 81 THENπBal.AnFlag = 2πPUT (Bal.X, Bal.Y), Bal2m, ANDπPUT (Bal.X, Bal.Y), Bal2, XORπGOTO FinishdrawπEND IFπFinishdraw:πEND SUBππSUB DrawBlankArenaπSCREEN 7, 0, 1, 0πCLSπLINE (0, 0)-(319, 10), 0, BFπPUT (0, 0), Score, PSETπLINE (0, 11)-(319, 199), 15, BπLINE (1, 12)-(318, 198), 7, BπLINE (2, 13)-(317, 197), 8, BπEND SUBππSUB GetKeyπMove$ = INKEY$πSELECT CASE Move$πCASE CHR$(0) + CHR$(77)πBal.Xm = Bal.Xm + 1πCASE CHR$(0) + CHR$(75)πBal.Xm = Bal.Xm - 1πCASE CHR$(0) + CHR$(72)πBal.Ym = Bal.Ym - 1πCASE CHR$(0) + CHR$(80)πBal.Ym = Bal.Ym + 1πCASE CHR$(0) + CHR$(59)πIF Active = 1 THENπSCREEN 7, 0, 2, 4πA$ = INPUT$(1)πSCREEN 7, 0, 2, 0πEND IFπCASE CHR$(0) + CHR$(16)πIF Active = 1 THENπSCREEN 7, 0, 2, 5πDOπAns$ = UCASE$(INKEY$)πLOOP UNTIL Ans$ = "Y" OR Ans$ = "N"πIF Ans$ = "Y" THENπActive = 0πFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπMakeTitleScreenπDoMenuπEND IFπELSE SCREEN 7, 0, 2, 0πEND IFπEND SELECTπEND SUBππSUB InititπFOR I = 1 TO 3πBomb(I).Sx = Fnr(300) + 10πBomb(I).Sy = Fnr(180) + 11πBomb(I).Active = 0πBomb(I).Rclock = 0πBomb(I).Clock = 0πNEXTπBal.DeadClock = 0πBal.Dead = 0πBal.X = 155πBal.Y = 95πBal.AnFlag = 1πBal.Anclock = 0πBal.W = 7πBal.H = 13πMenu.num = 1πManX = (320 / 2) - (54 / 2)πManY = (200 / 2) - 13πActive = 0πFOR I = 1 TO 10πC(I).Anclock = Fnr(90)πTor(I).ActCount = 0πTor(I).Active = 0πTor(I).Exploding = 0πTor(I).Ecount = 0πMissle(I).Active = 0πMissle(I).ActCount = 0πTor(I).LoCount = 0πNEXT IππEND SUBππSUB LevDisπLDF = LDF + 1πCenter 12, l$, 15πCenter 14, G(Current.Level), 14πEND SUBππSUB LevelClearπFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπA$ = INKEY$πPCOPY 3, 1πSCREEN 7, 0, 1, 1ππSCREEN 7, 0, 2, 0πLINE (0, 0)-(319, 199), 1, BFπPUT (160 - 33, 100), Lc, PSETπPCOPY 2, 0πA$ = INPUT$(1)πCurrent.Level = Current.Level + 1πCurrent.Gems = 0πStartBonusπDrawArenaπPCOPY 3, 1πSCREEN 7, 0, 1, 1πFOR T = 120 TO -4 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπMainGameπEND SUBππSUB MainGameππActive = 1ππLDF = 0ππl$ = "Level " + STR$(Current.Level)ππSELECT CASE Current.LevelπCASE 1πCurrent.GemReq = 2πCASE 2πCurrent.GemReq = 4πCASE 3πCurrent.GemReq = 6πCASE 4πCurrent.GemReq = 8πCASE 5πCurrent.GemReq = 10πEND SELECTππFOR T = 200 TO 0 STEP -5πSCREEN 7, 0, 2, 0: PCOPY 1, 2πFOR N = 1 TO 40 STEP 2πPSET (Bal.X + XSin(N) * T, Bal.Y + Xcos(N) * T), 4πNEXTπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππCl = Current.Level - 2πActive = 1ππDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πIF LDF < 100 THEN LevDisπGetKeyπProcessMotionπDoTorpedo Current.Levelπ'DoMissle Current.Level   Un-comment this for missles, they suck though!πDoBomb Current.Level - 1  'the hit detection is freakin nasty becauseπDoItem                    'I needed SPEED!  Missles suck #@&$!πDrawBalloonπIF Current.Gems = Current.GemReq THENπSELECT CASE Current.LevelπCASE 5πDoCheapEnding   'Screw the ending!πCASE ELSEπLevelClearπEND SELECTπEND IFπLOCATE 1, 8: PRINT Current.ScoreπLOCATE 1, 21: PRINT Current.LivesπLOCATE 1, 33: PRINT Current.GemsπPCOPY 2, 0πLOOPπActive = 0πEND SUBππSUB MakeHelpScreenπSCREEN 7, 0, 4, 0πMakeStars 300πLINE (0, 31)-(320, 31), 15πCenter 3, "CONTROLS", 9πCOLOR 15πLOCATE 7, 11: PRINT "Move Up"πLOCATE 10, 11: PRINT "Move Down"πLOCATE 13, 11: PRINT "Move Left"πLOCATE 16, 11: PRINT "Move Right"πLOCATE 19, 11: PRINT "This Screen"πLOCATE 22, 11: PRINT "Quit Game"πPUT (220, 48), Up, PSETπPUT (220, 72), Down, PSETπPUT (220, 96), Left, PSETπPUT (220, 120), Right, PSETπPUT (220, 144), F1, PSETπPUT (220, 168), Alt, PSETπPUT (240, 168), Q, PSETπEND SUBππSUB MakeInfoπSCREEN 7, 0, 6, 6πMakeStars 300πLINE (0, 0)-(85, 105), 15, BπLINE (1, 1)-(84, 104), 7, BπLINE (2, 2)-(83, 103), 8, BπPUT (3, 3), me, PSETπCOLOR 7πLOCATE 3, 13: PRINT "NAME:"πLOCATE 8, 13: PRINT "AGE:"πLOCATE 12, 13: PRINT "OCCUPATION:"πCOLOR 9πLOCATE 3, 19: PRINT "Manny Najera"πLOCATE 8, 18: PRINT "15"πLOCATE 12, 26: PRINT "Student"πCOLOR 11πLOCATE 15, 4: PRINT "- to scroll, ESC to exit"πPUT (0, 110), Up, PSETπPUT (10, 110), Down, PSETπLINE (0, 120)-(319, 120), 15πLINE (0, 121)-(319, 197), 0, BFπLINE (0, 198)-(319, 198), 15πEND SUBππSUB MakeIntroScreenπMakeStars 300πPUT ((320 / 2) - (54 / 2), (200 / 2) - 13), Manny, PSETπEND SUBππSUB MakeQuitsπSCREEN 7, 0, 5, 0πMakeStars 300πCenter 12, "Quit Game? (Y/N)", 15πEND SUBππSUB MakeStars (NumStars%)πFOR I = 1 TO NumStars%πMCr = Fnr(3)πSELECT CASE MCrπCASE 1πMCol = 8πCASE 2πMCol = 7πCASE 3πMCol = 15πEND SELECTπMx = Fnr(320)πmy = Fnr(200)πPSET (Mx, my), MColπNEXTπEND SUBππSUB MakeTitleScreenπSCREEN 7, 0, 1, 0πCLSπMakeStars 300πLINE (108 - 20, 47 - 20)-(108 + 120, 47 + 40), 0, BFπPUT (108, 47), Title, PSETπLINE (108 - 20, 47 - 20)-(108 + 120, 47 + 40), 4, BπLINE (108 - 21, 47 - 21)-(108 + 121, 47 + 41), 12, BπLINE (108 - 22, 47 - 22)-(108 + 122, 47 + 42), 15, BπCenter 16, "Start Game", 4πCenter 20, "Author Info", 9πCenter 24, "Exit", 12ππFOR T = 84 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππEND SUBππFUNCTION PointHit% (Hx, Hy)πIF Hx > Bal.X AND Hx < Bal.X + 7 AND Hy > Bal.Y AND Hy < Bal.Y + 7 THEN PointHit% = 1 ELSE PointHit% = 0πEND FUNCTIONππSUB ProcessMotionπIF Bal.Xm > 3 THEN Bal.Xm = 3πIF Bal.Xm < -3 THEN Bal.Xm = -3πIF Bal.Ym > 3 THEN Bal.Ym = 3πIF Bal.Ym < -3 THEN Bal.Ym = -3πBal.X = Bal.X + Bal.XmπBal.Y = Bal.Y + Bal.YmπIF Bal.X < 4 THENπBal.X = 4πBal.Xm = 0πGOTO FinishBofπEND IFπIF (Bal.X + Bal.W) > 315 THENπBal.X = (315 - Bal.W)πBal.Xm = 0πGOTO FinishBofπEND IFπIF Bal.Y < 14 THENπBal.Y = 14πBal.Ym = 0πGOTO FinishBofπEND IFπIF (Bal.Y + Bal.H) > 195 THENπBal.Y = (195 - Bal.H)πBal.Ym = 0πGOTO FinishBofπEND IFπFinishBof:πEND SUBππSUB SeeInfoπFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπPCOPY 6, 1πCOLOR 9πFOR T = 84 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2ππMt$ = UCASE$(INKEY$)πSELECT CASE Mt$πCASE CHR$(0) + CHR$(72)πMp = Mp - 1πIF Mp = 0 THEN Mp = 1πCASE CHR$(0) + CHR$(80)πMp = Mp + 1πIF Mp = 39 THEN Mp = 38πCASE CHR$(27)πEXIT DOπEND SELECTππLOCATE 17, 1ππFOR I = Mp TO Mp + 6πPRINT Message(I)πNEXTππSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOPππFOR T = 1 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTπMp = 1πMakeTitleScreenπDoMenuπEND SUBππSUB StartBonusπDrawBlankArenaπFOR T = 84 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππBl = 10ππDOπSCREEN 7, 0, 2, 0: PCOPY 1, 2πBl = Bl - .03πIF Bl < 0 THEN EXIT DOπD$ = STR$(INT(Bl)) + " seconds left"πCenter 12, D$, 15πCenter 14, "Grab as many goodies as you can!", 12πLOCATE 1, 6: PRINT Current.ScoreπFOR I = 1 TO 60πStar(I).Y = Star(I).Y + Star(I).TπIF Star(I).Y > 197 THEN Star(I).Y = 11πPSET (Star(I).X, Star(I).Y), Star(I).CπNEXT IππGetKeyπProcessMotionπDoBItemπDrawBalloonππSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πLOOPπFOR T = 0 TO 84 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(T, 200), 1, BFπLINE (80, 0)-(80 + T, 200), 1, BFπLINE (160, 0)-(160 + T, 200), 1, BFπLINE (240, 0)-(240 + T, 200), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππEND SUBππSUB StartGameππInititππCurrent.Lives = 5ππCurrent.Score = 0πCurrent.Level = 1ππFOR T = 1 TO 120 STEP 4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππPCOPY 3, 1πSCREEN 7, 0, 1, 1ππFOR T = 120 TO 0 STEP -4πSCREEN 7, 0, 2, 0: PCOPY 1, 2πLINE (0, 0)-(320, T), 1, BFπLINE (0, 200)-(320, 200 - T), 1, BFπSCREEN 7, 0, 0, 0: PCOPY 2, 0: PCOPY 1, 2πNEXTππActive = 1πInititπMainGameπEND SUBππChris Kerton                   THE ADVENTURE                  ftp.gmd.de                     12-22-88 (00:00)       QB, QBasic, PDS        376  16411    ADVENTUR.BAS5 REM done by Chris Kertonπ10 CLSπ20 PRINT TAB(35); "***************"π30 PRINT TAB(35); "*THE ADVENTURE*"π40 PRINT TAB(35); "***************"π50 PRINT : PRINTπ60 PRINT TAB(35); "Written by Chris Kerton (C-Tek)"π70 PRINT TAB(35); "==============================="π80 PRINTπ90 INPUT "Please enter your name"; N$π96 PLAY "c4f.c8f8.c16f8.g16a2f2"π100 INPUT "Would you like instructions (y or n)"; IN$π110 IF IN$ = "n" THEN GOTO 310π120 IF IN$ = "y" THEN GOTO 125π125 CLSπ130 PRINT TAB(30); "######################################"π140 PRINT TAB(30); "#THE INSTRUCTIONS FOR 'The Adventure'#"π150 PRINT TAB(30); "######################################"π160 PRINT : PRINTπ170 PRINT "Okay "; N$; " 'ADVENTURE' is a fantasy, role-playing game."π180 PRINT "The object of the game is to make it to the end and win."π190 PRINT "To do this you will need to use your imagination and wit."π200 PRINT "---------------------------------------------------------"π210 PRINT : PRINTπ220 PRINT TAB(35); "BASIC CONTROLS"π230 PRINT TAB(35); "=============="π240 PRINTπ250 PRINT "S-key means go south----------------E-key means go east"π260 PRINT "N-key means go north----------------W-key means go west"π270 PRINT "L-key means look--------------------K-key means kill"π280 PRINT "CTRL and run/stop means quit--------T-key means talk"π290 PRINT "-------------------------------------------------------"π300 PRINT : PRINTπ310 INPUT "Would you like to start (y or n)"; ST$π320 IF ST$ = "n" THEN GOTO 9990π330 IF ST$ = "y" THEN GOTO 340π340 CLSπ350 PRINT TAB(35); "***************"π360 PRINT TAB(35); "*THE ADVENTURE*"π370 PRINT TAB(35); "***************"π380 PRINT : PRINTπ390 PRINT TAB(10); "Designed by Chris Kerton------------C-Tek industries"π400 PRINT TAB(10); "<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>"π410 PRINT TAB(10); "Copyright 1988-12-22----------------Volume One"π420 PRINT : PRINT : PRINTπ430 PRINT "You are outside of your local high school."π440 PRINT "It will probably be another boring uneventful day."π450 INPUT "What would you like to do"; CH1$π460 IF CH1$ = "l" THEN GOTO 525π470 IF CH1$ = "s" THEN GOTO 940π480 IF CH1$ = "n" THEN GOTO 890π490 IF CH1$ = "e" THEN GOTO 810π500 IF CH1$ = "w" THEN GOTO 850π510 IF CH1$ = "k" THEN GOTO 660π520 IF CH1$ = "t" THEN GOTO 785π525 PRINT : PRINTπ530 PRINT "To your north is the school entrance, with your usual"π540 PRINT "group of wasteoids who smoke things with weird smells,"π550 PRINT "and the entrance to the school."π560 PRINT : PRINTπ570 PRINT "To your south you see the stairway which you have just"π580 PRINT "descended and the usual group of jocks hanging around, waiting"π590 PRINT "for the morning bell to ring while they talk about hockey."π600 PRINT : PRINTπ610 PRINT "To your east you see nothing of importance except the rest of the"π620 PRINT "school and to the west you see the school parking lot with"π630 PRINT "a couple of school buses pulling in that are about to"π640 PRINT "drop off their load of shit, *OOPS*, I mean students."π650 GOTO 450π660 PRINT : PRINTπ670 PRINT "Kill who!? The students? Man, you must be crazy!"π680 PRINT "But since you said so:"π690 PRINT : PRINTπ700 PRINT "You attack the nearest unsuspecting person which happens"π710 PRINT "to be a wasteoid with a leather jacket, spike bands, and"π720 PRINT "various other things a street gang person might have."π730 PRINTπ740 PRINT "Three of the wasteoids, who look tough, immediately jump foward"π750 PRINT "to save their buddy you have just attacked."π760 PRINTπ770 PRINT "They pull out a switch-blade knife and then *#fasdfsg!@@##%$@%^BN!!!"π774 INPUT "Would you like to start over (y or n)"; QU2$π775 IF QU2$ = "y" THEN GOTO 5π780 IF QU2$ = "n" THEN GOTO 9990π785 PRINT : PRINTπ790 PRINT "As you babble on to nobody in particular, a few people turn"π800 PRINT "to look at you strangely and then go back to what they were doing."π805 GOTO 450π810 PRINT : PRINTπ820 PRINT "You find yourself walking toward a wall which is part of the"π830 PRINT "school and is also a dead end."π840 GOTO 450π850 PRINT : PRINTπ860 PRINT "You are in the school parking lot with a few cars"π870 PRINT "and a bus is dropping off some students."π880 GOTO 1060π890 PRINT : PRINTπ900 PRINT "You are standing in front of the school doors"π910 PRINT "with a few wasteoids standing around going about their own"π920 PRINT "business."π930 GOTO 2150π940 PRINT : PRINTπ950 PRINT "As you are going up the stairs you meet up with"π960 PRINT "two of your friends, Larry and Moe. They greet you"π970 PRINT "with 'hey "; N$; " hows it goin?'"π975 PRINTπ980 INPUT "What do you want to do"; CH2$π990 IF CH2$ = "l" THEN GOTO 1570π1000 IF CH2$ = "s" THEN GOTO 1690π1010 IF CH2$ = "n" THEN GOTO 2000π1020 IF CH2$ = "e" THEN GOTO 2020π1030 IF CH2$ = "w" THEN GOTO 2020π1040 IF CH2$ = "k" THEN GOTO 2070π1050 IF CH2$ = "t" THEN GOTO 1770π1060 PRINT : PRINTπ1070 INPUT "What do you want to do"; CH3$π1080 IF CH3$ = "l" THEN GOTO 1150π1090 IF CH3$ = "s" THEN GOTO 1260π1100 IF CH3$ = "n" THEN GOTO 1320π1110 IF CH3$ = "e" THEN GOTO 1400π1120 IF CH3$ = "w" THEN GOTO 1410π1130 IF CH3$ = "k" THEN GOTO 1470π1140 IF CH3$ = "t" THEN GOTO 1540π1150 PRINT : PRINTπ1160 PRINT "To the south you see a muddy field, the school sign, and"π1170 PRINT "the street."π1180 PRINTπ1190 PRINT "To the north you see the end of the school and a moving"π1200 PRINT "bus."π1210 PRINTπ1220 PRINT "To the east you see where you have just came from."π1230 PRINTπ1240 PRINT "To the west you see the woods."π1250 GOTO 1060π1260 PRINT : PRINTπ1270 PRINT "You are walking across the muddy, wet, slippery field"π1280 PRINT "towards the school sign and the street and !@#$%^&*(((!!!!"π1290 PRINT "woo!!!!. You slip in the mud and hit your head on"π1300 PRINT "on the metal post of the sign killing yourself."π1304 INPUT "Would you like to start over (y or n)"; QU1$π1305 IF QU1$ = "y" THEN GOTO 5π1310 IF QU1$ = "n" THEN GOTO 9990π1320 PRINT : PRINTπ1330 PRINT "You start to walk north and notice the bus you saw"π1340 PRINT "is coming straight at you! Apparentely the bus driver"π1350 PRINT "does not see you."π1360 PRINT "You trip over your own feet trying to get out"π1370 PRINT "of the way, you clumsy oaf, and !@#$%^&*()!!!!!!!"π1374 INPUT "Would you like to start over (y or n)"; QU3$π1375 IF QU3$ = "y" THEN GOTO 5π1380 IF QU3$ = "n" THEN GOTO 9990π1384 INPUT "Would you like to start over (y or n)"; QU3$π1385 IF QU3$ = "y" THEN GOTO 5π1390 PRINT : PRINTπ1400 GOTO 430π1410 PRINT : PRINTπ1420 PRINT "You go west and slide down the steep bank on your"π1430 PRINT "ass."π1440 PRINT "You are now at the base of the woods."π1450 GOTO 3230π1460 PRINT : PRINTπ1470 PRINT "You take a swat at the blackfly buzzing around your"π1480 PRINT "head and with your excellent reflexes, you"π1490 PRINT "manage to squash it. You notice blood spurts"π1500 PRINT "everywhere indicating that the blackfly just got"π1510 PRINT "done feasting on your arm."π1520 GOTO 1060π1530 PRINT : PRINTπ1540 PRINT "You find yourself talking to yourself and then"π1550 PRINT "realize, am I going insane?"π1560 GOTO 1060π1570 PRINT : PRINTπ1580 PRINT "To the north you see the entrance to the school"π1590 PRINT "and the few wasteoids that have not gone inside yet."π1600 PRINTπ1610 PRINT "To the south you see the top of the stairs"π1620 PRINT "and the odd person rushing to get to class."π1630 PRINTπ1640 PRINT "To the east you see the side of the school and"π1650 PRINT "to the west you see the school parking lot and the street."π1660 PRINT "You also see Larry and Moe."π1670 GOTO 980π1680 PRINT : PRINTπ1690 PRINT "You go south which is to the top of the stairs."π1700 PRINT "Here you see the upper parking lot where most"π1710 PRINT "of the students park their cars."π1720 PRINT "Apparently Larry and Moe have followed and ask"π1730 PRINT "where are you going?"π1740 PRINT "They must think you want to jig school today and"π1750 PRINT "they say is sounds like a good plan."π1760 PRINT : PRINTπ1770 PRINT "You ask Larry and Moe what they want to do today"π1780 PRINT "and they say cut class."π1790 PRINTπ1800 INPUT "Do you want to cut class (y or n)"; CC$π1810 IF CC$ = "y" THEN GOTO 1880π1820 IF CC$ = "n" THEN GOTO 1830π1830 PRINT : PRINTπ1840 PRINT "Larry and Moe say 'What a Bummer' come on "; N$; ","π1850 PRINT "let's go to class."π1860 PRINT "You go back down the stairs and towards the school doors."π1870 PRINT : GOTO 890π1880 PRINT : PRINTπ1890 GOTO 980π1900 PRINT : PRINTπ2000 GOTO 430π2010 PRINT : PRINTπ2020 PRINT "You hop over the stair railing and end up catching"π2030 PRINT "your foot on the railing, roll down the hill and"π2040 PRINT "the next thing you know, you wake up in  a hospital"π2050 PRINT "bed with a broken spine!"π2054 INPUT "Would you like to start over (y or n)"; QU4$π2055 IF QU4$ = "y" THEN GOTO 5π2060 IF QU4$ = "n" THEN GOTO 9990π2070 PRINT : PRINTπ2080 PRINT "You grab Moe and try to strangle him."π2090 PRINT "Larry hollers out "; N$; " what the hell do you"π2100 PRINT "think you are doing? You manage to snap Moe's neck"π2110 PRINT "killing him and Larry picks up a big rock and brings"π2120 PRINT "it crashing down on your skull with a crunching"π2130 PRINT "sound...!@#$%^&*()!!!!!"π2134 INPUT "Would you like to start over (y or n)"; QU5$π2135 IF QU5$ = "y" THEN GOTO 5π2140 IF QU5$ = "n" THEN GOTO 9990π2150 PRINT : PRINTπ2160 INPUT "Would you like to enter the school (y or n)"; V1$π2170 IF V1$ = "n" THEN GOTO 420π2180 IF V1$ = "y" THEN GOTO 2190π2190 PRINT : PRINTπ2200 PRINT "You open the door and enter the school."π2210 PRINT : PRINTπ2220 INPUT "What would you like to do"; V2$π2230 IF V2$ = "l" THEN GOTO 2300π2240 IF V2$ = "s" THEN GOTO 890π2250 IF V2$ = "n" THEN GOTO 2360π2260 IF V2$ = "e" THEN GOTO 2440π2270 IF V2$ = "w" THEN GOTO 2500π2280 IF V2$ = "k" THEN GOTO 690π2290 IF V2$ = "t" THEN GOTO 2550π2300 PRINT : PRINTπ2310 PRINT "You are in a hallway. To your south is the"π2320 PRINT "exit, to the north is the rest of the hallway,"π2330 PRINT "to the east is the entrance to the gym and to"π2340 PRINT "the west another hallway with various classrooms."π2350 GOTO 2210π2360 PRINT : PRINTπ2370 PRINT "You walk a bit more and come to hallways"π2380 PRINT "at your west and east. To your north is another"π2390 PRINT "exit. At the ends of the west and east hallways are"π2400 PRINT "exits."π2410 PRINT "The hallways have various doors which are classrooms,"π2420 PRINT "and the library is to your east."π2430 GOTO 2520π2440 PRINT : PRINTπ2450 PRINT "You enter the gym and notice that a class is in session."π2460 PRINT "The gym teacher asks you what you want and then says"π2470 PRINT "please leave and do not interrupt my class or you will"π2480 PRINT "get detention!"π2490 GOTO 2210π2500 PRINT : PRINTπ2510 PRINT "You walk up the hallway to the exit."π2520 INPUT "What do you want to do"; V3$π2530 GOTO 2580π2540 PRINT : PRINTπ2550 PRINT "You babble on aimlessly and a couple of students"π2560 PRINT "turn to look at you strangely."π2570 GOTO 2210π2580 IF V3$ = "l" THEN GOTO 2650π2590 IF V3$ = "s" THEN GOTO 2300π2600 IF V3$ = "e" THEN GOTO 2700π2610 IF V3$ = "w" THEN GOTO 2730π2620 IF V3$ = "k" THEN GOTO 660π2630 IF V3$ = "t" THEN GOTO 2760π2640 IF V3$ = "n" THEN GOTO 3100π2650 PRINT : PRINTπ2660 PRINT "To your east is the library, you just came from the south"π2670 PRINT "to your west is nothing of significance and to your north"π2680 PRINT "is a water fountain."π2690 GOTO 2520π2700 PRINT : PRINTπ2710 PRINT "You enter the library which is a typical school library."π2720 GOTO 2830π2730 PRINT : PRINTπ2740 PRINT "There is a wall in your way!"π2750 GOTO 2520π2760 PRINT : PRINTπ2770 PRINT "Do you like talking to yourself idiot stick?"π2780 GOTO 2520π2790 PRINT : PRINTπ2800 PRINT "The door seems to be locked! Dam it, shit, darn!"π2810 PRINT "That really burns the shit off your underwear!"π2820 GOTO 2520π2830 PRINT : PRINTπ2840 INPUT "What would you like to do"; Z$π2850 IF Z$ = "l" THEN GOTO 2920π2860 IF Z$ = "s" THEN GOTO 2970π2870 IF Z$ = "e" THEN GOTO 3020π2880 IF Z$ = "w" THEN GOTO 2650π2890 IF Z$ = "k" THEN GOTO 3040π2900 IF Z$ = "t" THEN GOTO 3140π2910 IF Z$ = "n" THEN GOTO 3180π2920 PRINT : PRINTπ2930 PRINT "To your west is where you just came from, to your"π2940 PRINT "east and south is the rest of the library and"π2950 PRINT "to your north is an exit."π2960 GOTO 2830π2970 PRINT : PRINTπ2980 PRINT "You run into a stack of books knocking them over."π2990 PRINT "@#@@#$^^&&%*&*(()!!!!! too bad "; N$; " you will be picking up"π3000 PRINT "books for the rest of the day! Idiot stick!"π3004 INPUT "Would you like to start over (y or n)"; QU6$π3005 IF QU6$ = "y" THEN GOTO 5π3010 IF QU6$ = "n" THEN GOTO 9990π3020 PRINT : PRINTπ3030 GOTO 2980π3040 PRINT : PRINTπ3050 PRINT "You try to kill the librarian who is big and fat"π3060 PRINT "and she just knocks you down with a big swipe"π3070 PRINT "and puts her fat ass on your ugly face killing"π3080 PRINT "you!!"π3084 INPUT "Would you like to start over (y or n)"; QU7$π3085 IF QU7$ = "y" THEN GOTO 5π3090 IF QU7$ = "n" THEN GOTO 9990π3100 PRINT : PRINTπ3110 PRINT "You slip on some water that has spilled out of the"π3120 PRINT "fountain @#$%^&*()!!!!!!"π3124 INPUT "Would you like to start over (y or n)"; QU8$π3125 IF QU8$ = "y" THEN GOTO 5π3130 IF QU8$ = "n" THEN GOTO 9990π3140 PRINT : PRINTπ3150 PRINT "Talking to yourself causes people to think"π3160 PRINT "you are weird."π3170 GOTO 2830π3180 PRINT : PRINTπ3190 PRINT "You go through the exit meeting up with the principal!"π3200 PRINT "He thinks you want to cut class and you tell him off."π3210 PRINT "For that you will be spending time in detention all week!"π3214 INPUT "Would you like to start over (y or n)"; QU9$π3215 IF QU9$ = "y" THEN GOTO 5π3220 IF QU9$ = "n" THEN GOTO 9990π3230 PRINT : PRINTπ3240 PRINT "<<<<<<<<<<<<<<<<<<<<CHAPTER TWO>>>>>>>>>>>>>>>>>>>>>>>>"π3250 PRINT "                    -----------"π3260 PRINT : PRINT : PRINTπ3270 PRINT "              WEIRDOID LAND!!!!!!!!!!!!!!"π3274 INPUT "Would you like to begin (y or n)"; BE$π3275 IF BE$ = "y" THEN GOTO 3230π3276 IF BE$ = "n" THEN GOTO 9990π9990 CLSπ9995 PLAY "c4f.c8f8.c16f8.g16a2f2"π10000 PRINT "*******************************************************************"π10010 PRINT "*******************************************************************"π10020 PRINT "* What a shit head you are "; N$; " you got wanked or killed!       *"π10030 PRINT "* I hope you know what mistake you made and will remember it next *"π10040 PRINT "* time.                                                           *"π10050 PRINT "* Please do not list this program. If you looked at the solutions *"π10060 PRINT "* then the game would be no fun. It is recomended that you just   *"π10070 PRINT "* play the game normally because C-Tek does not know the command  *"π10080 PRINT "* to keep you from listing this game. Keep an eye open for updated*"π10090 PRINT "* versions of this game.                                          *"π10100 PRINT "*                                                                 *"π10110 PRINT "*                                                                 *"π10120 PRINT "*=================================================================*"π10130 PRINT "*             ##THE ADVENTURE##  ##VOLUME ONE##                   *"π10140 PRINT "*=================================================================*"π10150 PRINT "* Nice try "; N$; " we hope you liked this software.......          *"π10160 PRINT "*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*"π10170 PRINT "*Designed by Chris Kerton-------------------------C-Tek industries*"π10180 PRINT "*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*"π10190 PRINT "*Copyright 1988-12-22-----------------------------------Volume One*"π10200 PRINT "*******************************************************************"π10210 INPUT "Would you like to start over (y or n)"; ST$π10220 IF ST$ = "y" THEN GOTO 5π10230 IF ST$ = "n" THEN GOTO 10240π10240 PRINT "What a wang and a poor sport you are "; N$; " see you later asswipe"π10250 ENDπA. R. Crowther                 AZTEC TOMB PART I              ftp.gmd.de                     04-17-95 (12:44)       QB, QBasic, PDS        321  21221    AZTOMB.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"AZTEC.ZIP",4^6:Z&=15661:?STRING$(50,177);πU"%up()%9%%%I-%W4A$Cy.<il2ad%%k\%%%.%#%%f)%yjhS[gfxePLV>*Ule$b/OjπU"OQ5/o:GOz-mX$MpX5iXs_BWYY3a0QGH^pI4>vT)0R#DF[nqkUfm/ip\N9#cQ,k'πU"QgcYee:QVsX&Wg7Io+XI2(ls98q?BtoJVAj=s&/LsLmy\JNN,L=/E$k:ta%0t$vπU"s1zly_o$yNnmow&#WfS%=U[zV)KSI:&h>=+6)LmQQOcrSK6QR+KQbp>Me^Q;xMhπU"dKzVm%\=dg;=xq($UCUa<.:'FSJ$YntYU>Gk]8?HK8Icwh\(A-F\F5-4+IX$P(LπU"upSdTr(a86tIv?.tlPB^fTIM7rvKnsfG4=7bAn_Yk*PF7r0LrNQT]d:j\AF'P,8πU"#bqKFt.nzjkcloFzP<B:TTJ.J\lWP>W5oB\AoKdTb\Y:(7Icns4/G>W9hg[E-7NπU"ol:&V.uraQdXNlZI%wItHt?.pP_\CZlff:=\'63o9?2kuCodXbtA#T;NJnTW'.6πU"#bB$_FG;t+LumkGdHHWIN?lsG487S0TQh5KjVKnKLMf;bj?TX4or'.6+flWf3foπU"BAf^Kp7X-URF\>-VrfM$KFVrBErt90Nw$oT\1mq&-2o'szKJ-MVOyq3KZT<e&&fπU"4_d#$e(F&75Nv%6Zg0bLc$NGFrb>b0]f#+cZ.fh,DH4F)Jst-(e?pM=COLZ<;b:πU"]T1nXCx77br)gFsl=L7L\1GiBp,Ve0U\fB*vaH2>w$hMUM*O7kJUs6)P5u/H,hAπU"[Dj+b[d0TQ$BB307yilg>Cyf1I8Q5FG,dN$>z;xEudUS2*q=Jc12jjB-)dlJA6RπU"rLi$x*;xs1kaz\nWat?:^J-W>p3G,B*.>gb<B8f?JHC1kXi:ZbbqnX>nmiY4^WCπU"9OOCRzJ0)MLn_5%2H\Vjz<3i(5>%%+az(b%&i3k/NkOu+dW5PXsQnjCu[YB//dfπU"q4i7RdZ5x;mln/KreIF2)4CEtf,s=&:aU/3r]?FM)&%,]?(b+KXL.&2Q.O(:$Y3πU"E[G9/1:jRO=%g*B*DV12N0km%HcG:P%zVoa_i2r([2hJ_J,V9OlA-^\m6f,V:NUπU"A,kIj0441ti<UM-?\]J=A(KzcrLN^S?b<<n9ssbeCBgCIzh%&Z,Xe#\O<cBM9F3πU"8hezW&_%TYXr[y.A(xRy=,x-zJc)BU8Cqe3cZ,C;XK.3'8ZN%MEM:8((:zH_5P_πU"P3e3'33bZ6J6kkv3J]ZP9b+TJ(hsV]gT)P;%]A]#GxmsAF.$/'yVoVUx\OB?^L^πU"E(k<znJZ();m'K^/d1JEAy?tBi2)257ZZa?KIxI8fSAmHaZE3&Jm^5p=,BBZ)/^πU"5x2Mm[8<So2K\(:fv#MlRDL05c%0H*%t(Y:SOFrJ&:si)dNp7SnQlNNk;_ftc*jπU"ONr/as,l;XXUGcqJ]%L]>aX]E=#E^YGsmYY=_qIMejh#E;AT(f<g-6CW1K0bCK5πU"?cQ%OOB2ZuTfXx>31SyYrnsJM_pEb<LjZYx=4ibXw$N3?xWuj[Yb)?$j&%W160dπU"[LA^](65QIIL=W/wKd&;P(m<G?,X;]3L_q7/M&+*>pGSrM3oBefZv.+Q.OB\>N\πU"6J9[D\4s2LP>3-BCk\qLD4V*,Hdqf]Z7c'f2fEuv%Mt,a(J?M#>lV-o*iaU.k&FπU"]AtyWrCZodc(_=6A,l%T82/N:(t*dv^b]//rFD=mL>hH8vmG6H?,qASD\ECzF$5πU"MFy^dAW(D8w+GM,W&jo76sLQqL*FW)uAbpP:jalXc#_:oFY'rdJ$x#nmnOU<wl<πU"ZK0q6k-0mR^oDrDCu3jb0UXD)kGHdqLZk]gL(kLb^B48kfFAVaR6H&*P08+AWFbπU"dmgb$aP#J.puL8+wG&/A8;dT/Y>VhXu#.6_nKPOHE5^>4AZ?.?c'ck&fA]i=,;'πU"SH>lQbl*+QaRHN+GkR89-9%0y1PyAv><_?8Or'H=W-<4ge#B<;fbm;ghgd&qE5OπU"k-WEC3t_HAIoj1&TfT%a'5=B_ce(sgO\_qf<EQDl2BN<yHLdP4<>8.6GXQ[([pDπU"fv(%Bqn\NV-:^Y]B:R(k-N2fEQNBNov_wstDunduqdPjuP(\(uxWjPH(p4Kr6NYπU"d0v(e35K6NE:tLx29t,wHE=.t]L3)8dYYuBz9:st_-wsDIlwCM+De0d(q:4K75]πU"8MB5NvNXcwc=7nXZ\$sSgvxg7NLkeX7P6?4fl0;=8*m-Kl0:ZQ24BPM:vnZFquQπU".ld*0?'41iTOwQB-t]8S/8L\LtniA,2sd=IjIi+8CqmHm/&ItJOPFt8mtcZDZvRπU"lNj\lnxBL*'NjCNb1_b_d=T.StL>0wBL#AO4cDca]]fq/fDWg_cYCyVJGFGNx'2πU"P3xcH[9TVJu+%y-#)Fo%RP3v&Uhmx'DGZQ.zu=:U(*_x]'Q5v3fG]HRwzRkYa_YπU"Y'+^_67wjRugGs5C9_eD=M4BKP1z4BGC\?'$;9cF.:j9Rm/\iyM2j*AONiVvIVqπU";'2\s_7d63'73,icoQZv\2q%Cav[)&+GZ3T=_O-C?Jztx1V1&y)YZ3T=OZ$CuwFπU"JE8xMKBqDL2eYDw82jRaGfx6xhq;mh;Hm\.arnzRi5_v*(y*LpAmtx\3+HqZ?vUπU"+*jJacXHu_\mJKGq.jxkf=hZe'$N7KMpSlSKCnV=4$cTb7X[]t&P^;f-X#ED*30πU"$WT]U&vWp(tFSTa;b<q_sOu*q#OFGD4i;#.s$[:K<G]q0Snv66Pd3H'2yQ:S&wCπU"R)NTx(ENI?>L9R16:P<(eG)SoYN-'$7CAaY*TVp]*V#Rw:#xeH=lJtAsFwJ2Z*&πU")wram3o/3KCt=s:d.N5S[y#+n0-F5T+7qpO=43q-CD>T-sl+Rt_VqV.+&D'OfGMπU"meHVe7Ij#P?'M[kES+NI%&J4m],&:c0kO8['GTY#[Uc[Y8b'%OJ8[7iAw7%.3\'πU",J_4(JVbG2sl%PSLY,z[o$$WqD&+Y&<PpyS_S%_yub_-(nSj9N<#CRw]w>h+%>GπU"eY;f2::3^DXjB)]?2o=FP4z^kjVq\L;*#Fu6aq>qsm-Oq(ix]%8:vT[<NY2gyCQπU"[5IU-s1\8-v/#^\NGyEd,Z815(_zRm>J_7YMu)U'&]%JY0P95+:dgJ=>Kfz7al^πU"FI6oae:[jOM=S1oi3bZg+cv.1ifFhkJt1^;F89<(vn)MAzDwB]PjfZ+'P%.Np^7πU"AXCjcVcd[9iSU%m;k1K%j2bs%fNjU&l1LXP&gKz'iOE&G1TSZpM5BTqpD+Jvq/XπU"$MsqTVn817LAa_bKvK3*h<$/YPb;%bk1lBOHCb4w#$FWPaLgA$=EDm>If6aX9bFπU"*vs*WXYT\l1.k7i-duX)YzqPPbN)vq$='Mb7reHV8x$f+mU*FfDpsd')c.XM3XsπU"DKsH[edmb4e)xgyk#OF:>K,jw?D5=2m(F4tXue?DD-BCo$_=tNFo/C()bHP6EHYπU"wAhZh/\d^Y,s[e%b=>NVsm+Y[dVEE;yc-k=PyjlkC%5sCPdbV9vT-krbjnoN?^0πU"=v&P=4pP3nF01;Fq&9Fm\1wrTPcpI)r(DcDTbpXYVpd48##YIx:T>OSqtjbcWc9πU"S5/kabxnv##Xrg=>n)d)1r)k%.F41abktd[uC=72k?Vzj.c__9$fkC[)6lO5g%BπU"NSKlrq1kPYj.g)TKJVGUH8Nya#dn6H.Ks*onI7Qh,>vNHnFO2#>-s?qvHPL/CHHπU"Nh=Ca1f6vzPE\=\=^eX[4ks3m/A7f?oVJ*mHL$8s*k#&j=5,KXTt$1,:B>1rml&πU"FI6Q.R(>$.bs6u//7Rl%P%KBFs:95rJqJ0fKzYu(NFcpkzObqK:,J<c;N?E.5L8πU"oN\P_HR:L*$GG*3X+]$cBARunaJ+iONOoMgPL^_6q>Lhsl.P>WjElNpXjKR;IIUπU"/+1G8beO:&_=oUoA;knw1+uAQ1]cR.9GcM2J8f-iy5praNgor*s6:mk>J.Ok<z:πU"ah8Y=t3dn)bcp&ZDIL%KYad#SZ.3d$MzNFE2j'g/Cfd\Gx]Um<LSrJdj9N4\jyNπU"'B*q;)-V$BS&c[R6o-?s]t1Kg9=V<^p0u].$WVqugFg2JDsQ)3WFc8eh[alA0-5πU"APwO;KrTWUUbA7nI:9]5)*U*_bM9:sQRH\5G$'^0H][Yf#E%8fzER(r&S^3ePV]πU":QxhSGJ_Pq1WXjU'8Sy;cN(;x+FqZ##0s>MoXwN9aPqAEDYs6>#IBGV2;a-qESsπU"(d*V/:7hKTk=CT6npl9c>J:tI4%?b%Y:P0)VYT.<Bq]lL:o8s*7,LDZ(L;QQK#nπU"2)Hb0p<W8Wiv+Pl4b54T3sSj'F3n\<4sO))\q*_u8)//oAk)FGE,(4flo6HUkdIπU"D7>;ABFngGA*)CA,j7_hZQ9??sGOe\xAD-aLqUXZ_Ej$d,XS=G4l:nQCmlIU+)yπU"';lRPBlRpatQ5ujx$E0O_[c.Uub?&(nnXfVGN>j)kT/4^YUQTbDUrK[?#4kVn3JπU"n$(',V-wmc;D;8iZ'5?47VKOk^z[,Y+m+wY89P$<l'5E77mfXIIcRY&aIwG$NGGπU"+*51m\OWiD=3U1Q5ud:u%ktZI_Yo%_%>D.g<D76-p4^KoA*]K_7D:z1Nx^Fel>;πU"AZ=8&1VCgH%-3K[bR;HM/Y'=$'':'-o-eTB5m*Quw>84Za4#(kIUV]s?59spuXIπU"+uiW-A.-;cOE9b*p:Vc#*LlE4$2?:#vr/2AqO_+\HOZA5%=oU7iG1+w:sLe9oXXπU"l367$eGZ33ma<anANV#w>CG2;OS861%5Tqn.1.8')Y\&8FT5nvmU>sj'jT:Eg%eπU"jo-\noRRbJK6ky#HlRSLOo:#f5;>fWL'dX9^8f<wkeg9iTN\2&F5WzG1t[H33cvπU"_C+==snM\:kc<,$=S%?Uz663HEMl%3$%$Qq$G^9=Op%u6]QJJbpS/iEWYhP:YdlπU"b+I3Z%?q]cCc=\YYdqilSpDF7O2l;HnaNZ[0c%RpopJcCnfYaLqpR8G+.A%#NgyπU"Yp-d;%D6pO/#Hbt9n3Rg-]Q55P?SHL0E?8YC&%iqKFgS5928Kx3/0sboGNCMvS,πU"q%eg+2,Ei99,%)h4r7%E7pFKU7yi&aKf?C&])y+qPf95w4c6Oj>s?dZjolS?vxDπU"TFS_1l.LH1Ywe'xe9S%.OeOLh]dL#hD=$<x;/QP0_cf=NWKe)M)OxJ]'KYQkgjZπU"$/Rq/%8]WyVChvW0N7]w*E3I1o?c0>e3i\&Ad?H,c4;x]($]3?oi,'MrxN+-**sπU"L+#-r:,#VAc*Ev/7;yaFp,ash(pui$M?6Bd.of;ceaCKLYbRuBiq/sV8p'*V^F1πU"552:2h'+<G3G$B&82mzVHa<nEH%VMO:ZLMgs-f/bP;H1o;3lLWK8HL;d8S7qaQ-πU"c_<;5HNm%LnmXZf'Pi;:sLo>y.13L+t&A$B4)bMs\SPNYhRiWEXk6^[BI4)KM.OπU"UNa/ukgvgDVwD:BjuDAV5.Yrd8t'lhdr*Zo5_5iI&D7xvAjB;z2:t*n-T'P,aZ4πU"H$dKtF39Og9j9PJ+07fJY2B6In,&z-mv8Qu)2LZ*(mX03lg<GVAjkh^kQ)CJaaeπU"2_7Ia<rjLiERdF.s\rgqGqmIK1Fgd=2$%Q/sVt2PT-U[h7[BmKYw$)mwWqkSn>?πU"],f#>2kC76i_BB/VkWP9N01s9QOsK(1^O[l7:8()ED6VYbD3Tew>sF9<r\5&,MmπU"C'.6:l8cUX?a'=BFle\q-ZH%TNExXM#F8S:aniM)j80f+zzPd.)Wes[?,*3\pPwπU"^$R:_2=HG;foO(,^n6+:\y3*%J4ltk/X^>kl<lmOASA:R'i(XG/0_vd\Qja.rDYπU"CG-f?YQWv]ns;lOlA8bO%,5sFSI=9T&f%qOJaRW3fY-$n8=ku9$,:m(A^7x#1LNπU"q9+BnKa)jA.<AB,7\Hduh4EP]0]lKWfF%$U0hfp)vq&s5=NIsmsL</^&mHf.CK5πU"5EigE%_a$5nS\uHe$Gq;kC;m]\n1XW%ii;T?E_\rVOuT,m;n2)8(-lSx\5>KQmsπU"jl+qad48o'NYunIgOL0s/^4H&P_3Gl;f8W)<jd-qJwg#]<K1BiK_88Rr1on-;clπU"T-v)LKWMW>/''4Y<p&)BjE3hhE*4mV5C\k=+kU:VO1_/Fo\qa[LT4CR(V2ai71HπU"g';.&#UV'+BYQ(Nm<V_9U=:h(:oM;;iE%FP3DRg=hl]D5f.qKrn8K+NKZT;j[T#πU"%-QOAV%3z\_u+CB3V49kWcQnG>898bI#A$HfJv'H5.SPTib0Tk&\]&,L7-O:UeCπU"BHj.naM:+2Bp_zJ7m-a]k;c2%T)qJUV6*:CCR;j$0O63sx<^;\)F^L2*8\$B(]pπU"BlO.I1;_H=qAi<['.03<[&QJ988*cr)V;DF_kc23wx)p2R;m0C$6HJVR$V*tW=KπU"WuO&v7$O/NX<U9$^<>*5#%fJ.U,/Xxh$'xiTK1Mj<$aT^q,8$kPaIw:g]W$DipUπU"'[M-1kgo5CJM*E7irIeJL9CP<\HBocg5&QJ160asH#%ZL;J'Ij9s(fu+h7Y?r&'πU"'t\uJ\'^uPSxGk9K4IUjN;)0DGgwqaE0%R%6/JrLx=ZzOm]cw1=(^TmKa-P7JVeπU"/fIHyDmIf,uSca-$DscDEa=M_CNOQTGt50E,ht0GES[$<oO8r0:?9+$QT#(1I_WπU":$WMi&]VENV'3(9:XpN>I4T*[7vnAjGS&1?0YUDx>Ry4%(w&LSy^9fR4(O+:JrhπU"]AGQj0n0&0BG[hoTn0DveS/sRHq;/pn.(^v-qR/1<J[vz$COY>(QR,q_,(+/a\?πU"h+c?.NcH<3eWH%GeT+ECk-IgyMWIYR_qO]Q(ReYh9-Yk7=zdKWfWeC*Ysa(_m&WπU"khDn25<%O,GvEUK%-8sI)CJc6jGdXPzPbS)BzjrknXGWPw*oSE3M>&muE_u(*--πU"4MiaNDeD$ek<3rAi.dl-^G2et6e[*?F0CUu04,(o]3+*T16ph2lR*C+r-k%3<NHπU"QPF2EZX\hSFY:19Gv>1qP6#Rqo^L0o=*q.M+n#]n+LH(:EnKX'GP1_&&n&Rn_d8πU"/D(ccWi_rC:ONr8O?Sz7lL=-u(irOR.*Snb((Bp;1[2OJGZE2-l87B+/(8GuBBcπU"WMa1,Ki%bh#h_r:/d7JM,l)w:+_LGVq$;$('5bV;oL71t-E*Yi0'gfW5_Tb17ioπU"^?Y*'MN>b18^lS7/zTPlpfSrNo/>Flc.%D+?'(a^qqU%1Hr,alY]qY*,>:AFT]qπU"4e/:+fVlb+<+Jj+QsC&;CF^pARX5HF6Q_UukFm\78aKILE].L[;d,F-gNj\)\OsπU"jo(FiIQNJ33$43%cmATGPe$[woU/:b;w*54'N0/KI2p<N;Z>0UzBm%SP8]=Y<s_πU"#5*P#D;?5UO)(waC6+hpq\oEN11JuW-,91BN;EU)UxUd;0o_y,'4a^5u#mEIA?uπU"Vy.o)$gBOi:+:z1VxNu?\Itz1r.XF](GdGC3EC4w?gY4_bl%JE]Sa:+ViT=B+uQπU"(qaJLsWn&h'+VF)]f-0tBSV477=mw]mo)H1gt%1C?x*7-&xS3'N$])(/UWTE\KbπU"=K(JK:aO+]RP>aK:EfCpgdqftu/dW$d+B,wOq62[adns=&tpXrC614slRCRl%l3πU"n[JL%0x1r0]^&t$n1N(oiQQdrno2Jv)lllEomI1Zk2F>>a,l>6MHuBfix#/vNy?πU"E3uW4&IZwKiQlg%P_FexCtp#7,A,\WdaTz]%Mo4_O%6IDr,-0m4Xm\/F5&CQnT<πU"s1g'_rDDmpWr$c/A6^8J1lprHi-;j('/0veC.0aEpV't0(lTu5[SJ//Sp]JyJMgπU"yA?o&O^[%K)Vn8RLaJ*)%NK9Dk2.X6+YhB1^vAzjfAS_SGF%05gB[BKMn9,%'#aπU"$ceEfKkP6IES5K)*kG>kuRharZ;y(1J&)ylE-]OQF[yIlUdEt\<gWYp&-#FZM1dπU"Zt>&]Q;<$oxLf^s$l/d$nD,,l)3#P%e,G=sOv2J\>&%b/=Y*Z%prgiD;%h5Q&&qπU"I1;O,Ft]YOt*%%0:%l56qvd-PN\%Vfp+g*\U;%FZ/(a>*4fK>J)K$RKt\1nE%X[πU"(b?mF93ibF9FPSlhP;$>\BI8DhMUQEVs7v?21u$A_nclF0Ral>7rPIU=Pl':]eiπU"&)FVfG;V.MKs0]%0+3D]^f-<*AXo]lG^jL5\#rpd:b8T;bj/S;&9)2Vf5S(,>PSπU"K'n3?YgB--5\u:F&E(g'pGm[l(&nLKPlfS9p[>wHdf.S:oqE)Vaaa<]'Z-L&5c+πU"kq'#b?^U[*>>L,]U36ZreJcSW(-bFVIkG6N+;*CHk8QL6$:S(A+B>3i[_h(s]kmπU"f:Icr<D/>nL'G5<L=B_R;f=]cewM31-,cR1oCR-6Ya$crcsKpO&7T)Ddh1eUHANπU"0$c2/Ii4kCK?;>s]mUhK5a_:AU;hh$^.oR)_f#)]zAu%n2eps+AHdP.]CPM.t.BπU"L+W%&Nj#G,NjQPQnYFi5znQ40o4rX&=ry$65Y7=/4*vzaQ7&W3Rd(.N.%dGfEyiπU">G9p^)/=:*S]SB[go+ZP^0mJg]>rY=Z\+PLrnbt)RDW79gabKU5)Sx:j3eXr2(dπU"i<DQX2d/#)TG<);8X1)d[BK7EVe^#KUZz]9]nckl=yNXur<-Y=#8cM=qWD0?7ZgπU"jdXw+7OCN7]S]fq2qn9/ABNJY%1(?tZ3Kv^9C1$M)u:NhP<>lD^'q\YUIk*$nO<πU"T)2IK.BEnOlG&>p.#AAkHcqvV5EKOOjpu&EUPgqp=rfSZ8P7_Qu'Jvg<$'jM;sJπU"f0^0*Zcn,j2dG3l>,<g;+*?HYi.^o3.m;bjhcjN/\ps+URoeFdvCMA4ziDH(Hi6πU"zlIabOOrG?S;[;:c7#X[ADhZ249<mlj]XO$e46g*66')AnhmD#%m8o[)Op-smYhπU"JUAQBDlW,HHM$(kKkoO(N'E])x:q-QvP$*'D'mX1ccg#)#<S\;kfIA$ZF]k1+SHπU"j%NpB]>6EMU)4<A?kiWt/D;YBRu[5FUpIPc37c$C40e5)%kwo.-f,hg;'BbBm0PπU"fDQ+H?'cQI9Ophm/#U++.fdm.m$)tdbR01]Jr;%:V31]Z7\7DDHYoDJ6*AfTpY5πU"H='T=%g7vOw<Sb?4(Dctknonu9P&:tPA1Lmn_Hl3ds?3Kgj40EnW1S[Jz3Q&rutπU")PjN\6o9%e'H#F2j5V*AT3o,ZD;]3As&v$xggsK0xB%G,'A3V3dFHoIc7,jBa;[πU"<f)&uh=btieY-r)%]:guMUK(cV+,RonU0+lH-c)3x-e;ta_'Sd_#gYx?F9#'VH2πU"L_2C*6d.Igb9Fs0+2=jWOt_8x]rvXqJ<b1,-Z8vc/*nB**WPw3FG/pO<EvljC]kπU")VrWwEHpxh$Z2#h?N0w0L+7pvcl/z*^P6obN1uZ$xFF9uKOW)cV\kq*A0#.sVwUπU"BbSDF2j1w10=NL-:o'$W^:M7d^OxLDEM>IjQx):CLHj:/#z$h7h)3=nXh(u\?PrπU"<Jb.k?bl3(#]QjHo8C&o[<XZMcN8?J$E&#gTUU-k?q/ukrZR7?8<%GDU)%76<ZfπU"4ZIKG%mhCp4.-MdB\>)i$Zq>07*hKbNJJ:wS0,<9]#sPa9-6.o>g>3U5XF7$k#sπU"$/dGKV5V&jR0Y$<#]blTM<:0(sOvR_s/<XNB<t+d9=;/[#RdU/n_j/sEuQ_TsIbπU"r$;B3w'qk1E^M%01<HlS96*qc>+Pq+rTYt5_xf)lKwoYZq;>ZsQF$'zuNdzOjB5πU"$Fs#]?z/.)L-Yk-o^3Qa\tU[+Z\QG&A-=H0wDV7qE_LQ9hj,iJVwBd*>DzP,6W0πU"Vbj5yd=W/)\4yLGJSs^l%m6A-$;ZkfgsobbbHZF06E4goI-g8Fx&,G]895HTi)dπU"<Kp3neDv<1K*y%yS<nd5WE[:a[qdMR(aGm4:v?BV&+/?$rDa1Wsu86N1+I-wC'[πU"7FMA*-oo'J$a*EQQ5KKnFZ6-I*aKA6#n7X$kmogg.apeu+^u/grBI[8M/2I<Gd^πU"5g'lE$UOIsd_,P400^yW<A&Ka4h=YvwGthxo57]4EDPdIrYAG)t-53+ha#HvVKTπU"[(Nc::p/Ugp;/Fb&W7,4Xm'=S*(\a$:JC-u]/if_4f/%A(q;npbBnojAO1P]Yb8πU"9_.e'+H8&4f^(u*v0t'8Rokq'j8p/F&QUqwcXOe1A<YxW7-q1&;Akj9j/vthSU+πU"P%aMObV1Em8Klc&F:4-tC6m#Ay<AM=zqwjgi1&GtlpI+t_:^Kq*$e$*;rsOQ*qzπU"Am\-s,YA-9eVdTN7&V[P-1qG?.l9\DR54^/nvsill7<N;NJLUAfnvIv3U,S2XyeπU"2vR9CWo:FL<W;y*_X_'vtm)A;j=lqk+B=R?A^Tby5EPfqw=7+o7V,2gg;P$+dETπU"5VHG%p\KtjIM^&,PSl$eX:tUBiP0sS[AEV-0&^A#uVaETpznPLFT;WX:/.Jl,2aπU"-L$,ifE6k4DY3he(=6$$T4Jo5M+M.6aA+sSPXDO1cDJ'4-R+Fj;4YmKuOGmDmS3πU"j-H)SwaQ[%A\PqaE3RVP<r;Yt+BQINP#J6\rHkGPDIFE$_8F0Ry3U;r36?4*[(QπU"(/.r#<&IKrn%E=N(KzZO:R8M_=BoW(4kdoU.$]rA7NUEtaZXt\#SW_vG34g*H)JπU"F=Bkhn:e#H(1om<F>68[7,[^kpRQrC(3RM<8kOh75v66R34+bn5+3tuI.,^<gXeπU"]tgXC(uaIR&u'28F+83_%CxqY.vT8PR)F\$%Q$oXDIF2k+1n0YknleVsF=9T?69πU")AmhMZ2$sz0)]<%MmD0;fJ%3)NWc;6aN%ujwuLc+C^6o1Lt.&RSjy7vwE:KtgT3πU"Ww^9?m$82v/n5Yu4e(d-*eW[LsVBaR0*UItIpX=2,wL%Md6?\3[^mG'lLM&lw*2πU"4b_QBm,,sbR\/,naD:jhbBu(g6,Frlfl1y4kDZOE]5Y0t=8$A_B5-5i21e;b\f1πU"^M9>u13c_q,90alV-_o6'$C=S&6^*-%nqxg;<u<<2<l<.)U'eCCc(akbaVS^<^%πU"^UU]UwUnG[HvAR6A<P_K3ygbbh+$DZ24R'(;(l>cY%MGW%oqRPc+[oI44T/\VyiπU"n\Rp>SH<d^GDr(l[gP5cAA;U6y)5uAXQ>r#c6-F[[=DtiQ&olNO/9w3TT>PZ0uOπU"+9waTuLYKe=k\_+l7oLzmNm:Li7/Tl(=w*0\,bakHNUqNr,mfOavpVc$gAiB71?πU"_ZQyT,\[v>>TnvG+.vJ^ekVuiAew-jc9dj80BNO$9vbxdas1]G:vCip/FEGN^#8πU"8mRw[oum)yPU$:yQk/C<-oSFpa^[,'9ZH<$D4loZUu*<4DC_VGA[V#WHn]rA>i/πU"6&N;2?Q_hIg3XG=GTe%,AArW:TwpZ:e99D<s+A0-iC*NP8=hfHVLdGJ]:m2PTD%πU"0o]sB^mD1[1sJwZl5^+_Rju+HsBnv5\_P^uC-_2w[&o)+Ck6g#_pc6gDO7d<m9?πU"0hM+g]#=fSxe3+Ht.EgA=A)AExO?VV[h66'VR$NpFVFlgHB-bRIh;j$=p7YEB$;πU"a=p1VawIFc=^hfCH)Z1oS-3mP073EZ_&N/P:dA',2W:/eBbZhUi,NsApg^Eo]BDπU"NB^D6Uh1Uv?lKsGWFk3kMc<i-ZmO:fwN$h_E7S48URCn^tJG^aDR&>*fL?tmcBZπU"URXt?xYSBcWRD;LL4L6JnxoHlpGS_'VH)Vev.i2N\gr=atEi+X3.=]::9CE]XxaπU"6nbkkV<vL+T+*NRl*_/r=L1CGBgeb>x[p#A$gz_u;>jeMC-/txSUsVOXhmIFCUJπU"_3C&v%b1/kR_c0^q5e*JnG^&?DpUot&>8?xM4Xf<\NkQY:^6L3mIFoi='WItevNπU"CQ7'Rbuicr5oH7Cj8kgJHu_\.uwo06$#Ndrunh#6*#QOY,wo,Y5zRLk'pt4Cou0πU"I6LpBrFmo]wf/>KYU3;SRl^ln(JcghePF6JdP,SxGmrCE6Gs1Bvt:-=MfmJ,vbnπU"vxIAIQy7wfVN7Vo;Xtqs?uwpt.wsPIGr/Dp#nLS.+T,9QH^%9\K%;btl+h]lR_vπU"r%*:Z^[,8bv_KBW<983b\OG7akLy$v=XZ;ckRb$ug])ThGnF]ZYHAa+4e,vBhFsπU"6]4]R^z67:YL8p/q$oGB9k>k/YNeUX?ZN-pXBAdpwAU8f93hp1G\uqL0mH3vJ?:πU"VMMUV>P1xF08/sd15<Vstc5<r;^W_2mYXUG9v=705iIsfCIkmw,Y;l+*WO(&Bt=πU"9W3Go[.qUT2HQJE?C6malc[#G,#1muYjTk5Fc^yIo;nP:V3R([=q*J%gAO#+fPWπU"]yuAW+q#%GDO*nWJOm_Rd3%TVavfz+\_:XKgBnbp;>Zq%BF.rs?epoFjjPp>+p<πU"LD9$w&?C2dWUWz;7H9cn5<NNdRuRfrT9/AUj8+<F9P2Vc1e]ESpUPG#m$cS/pQ?πU"i/Ug\.0M+DFMQ/i+F.%,dj/Gr\com,)94g/[5;d$ioX6wF>0=b?1dN3r_71KKRcπU"N<%fSX)?-YEfu(PLMnYw;kUioAvGqb_0Q+V0*eo_5q>mE4C-3'hrz5PhU7_')dhπU"1k;rC>qE-ahW:O=HE;+/a+_Y87+s0Uhe^BLkWVg_Bgk[h_HA]YJYP5gar8.A+g'πU"6fcbnsy\<pt(Lg5a<.A[.]OxnScum6,t>u^'%%?Qtw6n59WwGI%VHRWeNkTXMeqπU"ZXtoBGd<nQmDS0J.E:*(DGteCLPI$b.?5jR<_Vw/#MV.KEf$<ne/MO4k.860OGWπU"e$06R2pC+FX5tO%-6Q&_;/9+?]c;1EsWA83Y(MpiSSaR3(f0DcQF\0UZ(2ZhX8NπEND SUBπSUB V2πU")o?Sw.L(%=2[I/jdD1]tS3k;DWD7.y;vzV>)1[^MHC:a)-u35m0)q;FQQwPGY;RπU"NR*;WXd9Wdg0)W8up#%(nWep<3_>wIL8:vN_mGoEFSfm/3_iZ0^W=Coq\?BGI+IπU"+yfSdiKs9911$-,j;>lJXipxG(Z$3Q),w=UIlO$r;^7ulkDn:ew^kd_^S],Y_A(πU"nm.7]rtW%opQptrhuvvR\m'qnc'3p)*%/Ro>[=&HJe7;?[79M;]/z-Gr:Xa4_.<πU"fPg5\,ae]Q]Dk5+g)9hwpgghtoJirxRi$8Uh]FPVa\F$XL<Q7-(Fh%C5tKihqVoπU"Tg&sc+FwzaWHD]5X-rB^5Nk2&FVns,HYM-ShtBy<q$Nwr4dxkAg0c%1<V^mZ[MmπU"jh3D3PldHv0+o8TxoqgrtrEJr\'^gNIY7m*pZ-5p^,LdI21W;$_8QW9k#,vE6=IπU"^Q6_U)V+$4I_.*:ky/dfn7'V,'hArf6)%0]SAvc9NsLz6wU?Y4a]79n?\F=&2^?πU":iiC?WrwdZj<aOW/MqvW#F72?TX^=aGW=[lRZZej7P=A\E^fP'p#^7A^[1nuigcπU":8Q_1r%w3eG>aep'\,Fy,/^u[q]Z4)%U^d8c:)alS_r:%O<.gf4m.8sfSoacq,LπU",()jlDMT%nRus]0kkWeA6PY2;d0Dzx]7'5KcN9#G_$qz)GR&B[&BtdbboR4HmV4πU"tMC4$<m$:AuKF7j2^':lChl''^2HN9n$NXOzv:dQ.H>u8\(JSkl(pbqQ;mAx=\0πU"Rc_1gVNskaQl.)emx]b;#NoeBo8f0kxu_E;(-eQ.kHl,0od3GQF^zh0hGtL/y%QπU"%ENde2MdnuaU7Zml+q6);FPtN'Q]Dk]1bby0E%:2nKEW+ZBTPnbdH1&<=l'?..(πU"Mvi9'kZlf\TB(&n.MwewDLr?iDB.duhb?-<U6s[e2:CIlowp+drRQSp]GD1atU*πU"I9TIA+JHL6>?5iNPd5nR1<?sdhB5vA;Q$xv4uv1OlQIo2^N'.GdzFEQAm(1v[GeπU"s>&8?9EYN<Oo8^r.-P_h08$IGW*,oLZm#2)wO]b?Y-Vp6OoF%2IHfcX5lN(O)22πU"^DpF=[97n%;^>DFE'L^Xa<B'Ff*#a=,N,g,Ov4WTf7I+YlZxVkoOk9]i2']1#kyπU"^*A(]r+;]_ucaYE<,IiLYTL)Ab(M_&^LUrmV;VN[bgjO$wR13>uPWww?UeU3.+4πU"wY+CKQ'xTJQinZ^L\#WZ_K\a9B5$)Q<]JuLEa<u\:6<>^gndsI]<;#l8qP9Mo$gπU"b5wew?IP^cCS/7sD-yM3.ah5LGLe1p\qERLt1vLEZ6:8W+-m5G[%M4etNE[/\ojπU"Do7n&A/1HW.HRpF9Mp-95\^FV2t%dQ1RtY%XDE^hsPI'MHR;+/q>kPZ6u>Cc>nrπU"*jj^KMp/,e:0wDnbRlc^ILTtG1(.K=4E1uESSxnKV)-YQ-R+j%:9vKha<SFp02/πU"/mXC;#WqOWUU,1.VeL<+]GN8K-MGP.UVs.lYdO6(Z4^jIPLxmVMHTNyuS76Yc^gπU"[4iJaz7'oPF+'3r23fJZ)s3=H6eGK70[=N0(0X.Cm>sdQXTA155gV:],v6%#c9KπU"N9gV2kgA3%C-pg[^?^L<%(ADw6)AOrieo_;JdV=G2/VQ9Cs^(B<I[KrEhuRa-'+πU"jAHj/7]lpM]f=5fQkPD([%W7IrCZoS6NKxc*%/P^>QiPAMxlYPbvjV6n<NthOp/πU"v>]<lAUB]<2,+]Xv)j>i#JbX5wXQ-5l7Iqn5K4hiG[FB/2.Ia4Iha(WmBh.9nt:πU"F?ARHa4twdB*Q$n188=ZFFW;,kR8[.nIC6A;5&AW-A/kN</k)5k(9SAVR::9kZIπU"=*/kT#lI+Y*Z7DHD'7&hl8Hi?PP?:Qu%\]J\Q%/8B\DGyaMYS\O)8%DVHL##n:/πU"?<+G0Sq?Y[k,K&^(w'&Z_l;HK:O2&?G;Ht5AcZY;oi-RY?$GjfdcW1t,T4Q9%Z$πU"78mZI)(PTR$O&r5.lPB$2CIa_Un;c%A;20J**SVNoGIiYpOUG43Zsbv\4(HrGH/πU";hrMFZK7P#h_G%Eb(1EDC+Urn]v'v*E)BRKw07]TvQm2P//1SQe$B7QVs1+0(LfπU"]6=)AH53^m$,v&8cn0iQ'\lj0s\B4-xfly0MJn^gJ6iYPE0A\DMI*LoG];-)UGYπU"hD':9>+.8/)R.j'M1,tKw[P9Zlv>o/:[WglVY4G0U3dddZKm/wdGIo'^>SpU:BqπU"%bRcRBh$438h*SA+1)(+TNHi?Sf)O)-GJL^I9->'nG6+iamgZYiO,S%B4CF^IX]πU"'#9h4wfhOD:*f6-EAr[x;aK*+JW.X\ZXKa.QrjmrRE4*Q]hQ:eho+eOFyT#(o[$πU"INX<]2,Xh]FVWQXp>b3gxogk)kyjEAJUhU%(KN538H+]ls)Nhbr:d9Ck?nZ,E'aπU"e\\%2V1P[sGo7N4R;MN_eLue\+FDi#tSj>oS<\CEY5,J9w23pWA=fW2,.(9oiT;πU"Ugkd9*prO8k/><_VhEgooL$l:EJhIe6cA;rGm$K5*5U_gU.ttm9SW[W0l<q]Ko5πU"M;'u4]TWRTDe8>>?uIs_L>Zv77OvcV\g14?buS--9OO'?POVRL:,Bk\FvQ%00RhπU"OwN?J2tJ(/zD;WFl&]e3%7E9h5]U<'-MiDpJmXthVF:,clC/R8TRsH7-Mo<V^S5πU"Rf-(3CHA%p/r:_pCb:(=M3#\\V2MoDfBAU^\iucf:TNnW<mU+m[]q^-(_Yl,:#.πU"alNI.wA9M^i[RYEhTvw<M#ZI75r(9o%h,<4-0f)su5e:A?\F*GIV>D--Kh+-&,^πU"&yCiWfE%CAu*#hwW,db7N\9gSnT*/<wgbZg<_xSRC\QUbo+vipJjhs+$/60voR7πU"F_(UJ'q6qTag+fZrJMhJ>Ov\n\s\A)eNGvk;ckAaoY^mUJ*7,$ZT4=8WI;N'PmiπU"OhVY1ls'q'$<IizXFE9wHtlR+ydAsg<I>rjWiA=t#$6BJgAC#]n('5-U\dLWNmGπU"W9C9=n;/j(BWg#n=kRQ8%YY/1[$r)ok]m<i*KWN.\h8OBfeuqdnp]DM4BZ_8Os?πU"?RnYMg5z]oZXCpgLDCn5i\sQ<Jg8$f:7.mhCleKsuf>;$wK6hGq0sSA\o_CmgLDπU"MC^-2YQ<A<+WB%lwE8)rv5MC0;Oeu*PJ<1;<NY7]=oQjH-[vS]C_eW^[6]<LoaqπU"B'AQ9/l_NF1bL=]77:]mfUR_4ASl]/H*YS)c[6P/0:y?aCDaNw](.]J8/I/1Cy?πU"mNCUkJRkpAOr(Ho3?tYEOZ8?-$Df=Z/&b-I.+Ss:e:(1OktbTRj97/3h4#U]D\jπU"qPP*hCaZ/luQb:&hRmL_P\5eDcZh$\rWl-8dT^9?xFOAr$ctMK)3NBq\fgz_πU",B+PFb(g>YaR]CmF9J;8/0kwE.mve)[R*yY[*&eA[==nW(NY??[\$ck;TWxQv1HπU"$Sg6NRY//ApEFRMbuo%UE9$2/jm0dUT_wHgt,1$T7*h'i^8cMiUVWSG37kS^<+jπU"BQo;JrxMhZ?Z#mT<vU*M?5G*usJAWUfNmr^GU-q7erC;NBTzmrW^UI70?*+*U7^πU"tT^>RFSEx&VE6ma'$%MG$JIPuPk<][pS[E2z#Xm>e9:kJX>hX8bCWTNsF\K_Q5tπU"(qV];OLhDd:C_wuHbp;T79%Q^2U'X+6w;FP[Yxr<HhRfd3c/m64vNQruSm2C*.VπU"K9#/kB<r2]H8Y)PsH97CH.Q7DrCV6vshq,9EoP7Bo2KfJ.pQmb174q(bNsVLwK4πU"ej]=<x0LRV-w/dt5ggoO(ZW6fRN]g?H';UVrUhD=X4Y5sxSU_U.jjR)-Ak]=':JπU"Tge>?r&s+:otDQtBp*kz8i$V98K_$?EU6Ky6-.IDO;gLChGn_wu20QoLZvS,I\]πU"DxF(4*AEU60Y*a/=d.V%54/vkmB0>4H%QY1oQAEHC+(Q[39DT:uWLaOS4B<3-W7πU"a3oIq\6KAhKITH_^]Cn%,O4r8Ps?U:/iHL9a'g-XBQa.ZoIjb1lR.>HaiPpkr(SπU"?M:kvr1P.T\\A7*3Fds1,B#*(<]/Q>oWf#.OiJ%zo3,R:&tpFo-7^pg7P<-4ec,πU"YSJK?;(CeSF-'%Z^)$.>3MDiDOKi^cVE$.'Jqg]ciA%p=KiwE-proMD(I1[4SM5πU"sIS,ZuA_djd,8YW6L\i='^)A>/LbT+3=jT6)B)K5+jSx6.6oQQi8mqQ829)h;>>πU"+l:]\G*5^/K9qs&ZFArtcj.AB\d6t]wd.,NJ7J^+*]2T6T\obBoo0J4Y<)'Kmf;πU",>;q'pCdd^H)>rL8GY-nxZPO^T#-o+8Y%^ig'KpsFQ^6NjOz^;[Dk1,+eM1E]EjπU"A-UhrCXsop()k;gU+C4/iR6u5[SxrIM_KYlwK;e>WdI=y)fQt_QYXa]2U0Z6SmtπU"dr>D6.AqnbO\<]<TctB>L'ifV)SGH>f>+N,jOu+gjGkYN=Pc?ELF-0%z2I$On9mπU"4u&q.aUk4=.F.D;Audwz/&7;B79NamDE.TQFp):]N=je^4l5(IfM/GR>J\?-Di>πU"k%*\Z.,_/N+Wh<O*rn'U:DIR(qb)<Dx43+ItCE^w6jUm6R1EBpe0R*G_PZF;VnQπU"wevaPjZ/i+#mCd)M;YXA->>35EkhB?<Q^(9AVKCB2$s1+r$wTW$oV#g'9<esfteπU"%ArW99r&?^f)sbu$RS3JY6g0bOuX7+;XvQoUA&u=d]:G3%skgctA,vlFDTBqxS_πU"uuxK5h'1kexa-5kZ,nn9Q9V+:1&Lg>_ps0>c6^#ZI/A/Bf=%BJ2EqcX9QY2.GuhπU"1n19?evEb4[1gKmME??oWJu?#*m3g^dh3_BVG[IufW2h5Gkb5M9*Q?i9\rV8eGKπU"_?m46WIgd[6X0kM_;\5Mi6&/acZ;_VP'g/K5>;DO))Jt-K50:ZZLFo*Oh9lyLGRπU"Y9dbP8x2a==ZcNuxh'[uN-FxhN4sr,7$8?15B_CeAh?-])U?i&wbj=MZiIkR?9=πU"P%D/fpnh-K4:,%]bSPV5)\k4DltIK'mn_lJ<l9wwI)JNecBaD<]7lOdEL0UTW46πU"bL%H28t]7JWEE[F+1#TkkI=6+17l19[-h;Ha)d$SR*xUc>3X1erLv)I')Y^FJ(oπU"<:%C*E3QhwV97eXCsL<^Duk'H^7F0s.NdG]K1dZ]]rN7#LI$>A3Z>OFhuqHAYl9πU"aK6.m_$f:l0otn&:x\Dq_VZ14Bvb*HUtpb3ohUOMU*?waic/vUe=t'1v<UHLe#,πU"n&BPi%p<\TVHb94HOLoTW8.=%SgU8;2fjQdU=JJ&[_Ms-Z_g)L_O>l^Nvude_EmπU"7QqCkWJIwwDjYnO&AS-Q'DYn7\Q.GwQBfcyzCK2Fbg)jv$+^qld=H_BD/T[&^ShπU"=1SIgdSE]Tc'HlPUwifiuQfa(<kF.V((GUX:KEdJp/o1IvPyb($A$^a1^+Aib7wπU"3EoW\:K1vZ7A?X_[?r8)/t]eRG1x:'7YjmCi:j[kBw/QiUEILo.l'ZKTwxr1cXoπU"Y7HQ*b\4To7ti\Zf#4s\Z<T#sZZq+d;eHw-p/fl\^$h\CMGY#bb'daO)<3[eGt7πU"4jrW--a^xUhZ[TIFHW&s<=E^[$OMbi2;zl%RP%s:F0wptMQ>oBchEa(T&<s9uO+πU"Y)UoA=O\f4ynw-<Fik$j>%DH4pCIoomlBm=b]*-Qc7AXo$Rc=moPu)wBE]0L;fUπU"8'Mm^]ofnrlq.IP5yZ.:?D4\PKhw/uLErQWwKUB[#/^o3-;8sb]hN05e53$WU</πU"(EHul[f9OM:]MtFHYd/^a_D1e.5E>DeMaR#)7YsJ.?$6Xu8t(8O$)95C1>?dP'MπU",5*?.sW[ZccaXO%Jas<+4RG'L/;Yu4Mi,lSo'I0dj\\4&/)sO^h9V2R(Cr3L]07πU">=KHDVViQHk/h#HI:iP_A.E91en^:RMX$?b#?b2ALf.eDHd%2a*Ptj:UQuRs#pQπU"9G(_&k0W6J1iwfP,7Q(,g=)?+,4-Z68(iT-l0#l]9BT=qcFXMHn/B4)%V\l>IuYπU"e,0LnxOSs%\?A^D4*I'I=guM[v$Cd_'SXuS33Rr%EZVQRa<shc;tOpEf0(6uFQ#πU"()ZG2bK%PXN8MZKVbcrZuub(TEiZb-jp33ZlOx8eV9JTSkPi.*Du7(\smQY9C_DπU"vjJ$;\UIM58bEoTi$#_NpzMEzaNjdg[FET$J.:7K(aPF/$QfhAE+*#(CRQ&90PEπU"fo;t+WNzNo\^,kKqF)d6+;54$b&K3OjVbGR6vcSSc34la#GMBDqU=c^b%wCQ+<eπU"(oMPc']'/M;W3mV3lJA)>tFprASY<XqpD'ZT+k'Irqf;6AK\i&]?>Z':GDxzt-RπU"dwV7E+?Y*3?2*X$L8NDmhz7Li68aZ'Qo8nN.7jRA0aJ^'^-6?eWEDZ5_wVLeB*_πU"n0fR<KgM?skPBpMlq4GW^c)*t$B/0vQACn/ZG\/EV1*5y8,:Q4#J0<p#6d=F*nXπU"Q<-/pe#6X9,bn)EoDG5Xpm5fV*H%T[Mv+3<4Ff^J8Z.g9U7n1m9fokMc1gG>noLπU"3:w<M6]81nP(cYI=%y9Eo11zduG^CMT;LzoLe8AD5lAE^i/Z1OLoT\,z<b=QvK_πU"uXBT-rV9.I&B';%b*%D<62LOUh[l-wc0.7:jcI-(JI?F]r&-42X9&oCr+[,[ZI\πU"qGd^l+)ItU:dFBpQoq5(G/[*+qV39,)?IZMZXRL\aoU_\f&&p59wp&']YnUvw2&πU"p?*u;S5INK8q)vP?ErdOfUB9IIxk#TuS;ttcrUJFSKGurI=jwpfiN9&8us9C5f$πU"9B2QqA(F[^MiOekSS/Z\Rvt-KZi2TUd+HVPk7<+;<c;u,nL'$H#eN#P[,nWapHHπU"X2Yw/A/%S+2'FnC;iA_53H7L_lb+*M5brih;5_p/Prvx2a61qAGIb7aLP%cEK3MπU"v(wcp(pHv]ZZNWl5Kc4=wn-,fs3lN6$9Tjn9JpCpu9hcpm)(mS#kR1Y[9KZ-&_pπU"V**M^w<r9*1x(%up&'%9%9%%%%-%2W4$CUy.il'2a%%,k\%%%.%%%%%%%%%&%E%πU"%%%%%#%%f)%yjhS%gfxu%p*+%%%%%&%%&%\[%%%Y%a%%%%%πEND SUBπV2πCLOSE:IF S=47AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπEric Benoit                    GENERIC HORSE RACING GAME      FidoNet QUIK_BAS Echo          03-13-96 (00:00)       QB, QBasic, PDS        84   1921     HORSRACE.BAS'Here ya go, do what you want with it!π'I decided to post the local version because you need EASYDOOR to use theπ'DOOR version <duh>πCLSπMONEY = 1000πDIM X(20)πREDO:πCLSπCOLOR 14πPRINT "                Generic Horse Racing Game 1.00 - Eric Benoit 1995"πCOLOR 12πPRINT "                ───────────────═══════════════════───────────────"π'πCOLOR 9πLOCATE 5, 1πPRINT "─────┐"πFOR A = 1 TO 11πLOCATE A + 5, 6πPRINT "│"πNEXT AπLOCATE 17, 1πPRINT "─────┘"π'πLOCATE 5, 75πPRINT "┌──"πFOR A = 1 TO 11πLOCATE A + 5, 75πPRINT "│"πNEXT AπLOCATE 17, 75πPRINT "└──"π'πFOR A = 1 TO 6πX(A) = 3πNEXT AπCOLOR 15πFOR A = 1 TO 11 STEP 2πLOCATE A + 5, 1: PRINT STR$((A + 1) / 2); ") "πNEXT AπLOCATE 18, 1πCOLOR 10πFOR QQ = 1 TO 80πPRINT "─";πNEXT QQπIF MONEY <= 2 THEN : LOCATE 23, 5: COLOR 11: PRINT "Whoops! You only have $2 left, you need that for bus fare to get home!": SLEEP 4: COLOR 8: ENDπLOCATE 19, 1πPRINT "Money: $"; MONEYπHORSE:πLOCATE 21, 1πINPUT "Horse to bet on: ", HORSEπIF HORSE < 1 OR HORSE > 6 THEN LOCATE 21, 1: PRINT "                  ": GOTO HORSEπBID:πLOCATE 21, 40πINPUT "Amount to bet: ", BIDπIF BID < 1 OR BID > MONEY - 2 THEN LOCATE 21, 40: PRINT "                  ": GOTO BIDπLOCATE 23, 24πCOLOR 12πPRINT "Press "; : COLOR 14: PRINT "<ENTER> "; : COLOR 12: PRINT "to start the race..."πDOπA$ = INKEY$πIF A$ = CHR$(13) THEN EXIT DOπLOOPπ'πCOLOR 15πDOπFOR A = 1 TO 6πRANDOMIZE TIMERπX(A) = X(A) + INT(RND * 2)πNEXT AπFOR A = 1 TO 6πIF X(A) > 75 THEN HN = A: EXIT DOπNEXT AπFOR A = 1 TO 6πLOCATE (A + 2) * 2, X(A) + 1πPRINT " ";πNEXT AπFOR Q = 1 TO 500: NEXT QπLOOPπIF HORSE = HN THEN MONEY = MONEY + (BID * 2): LOCATE 23, 23: COLOR 11: PRINT "You Won $" + STR$(BID * 2) + "!!!          ": SLEEP 4: GOTO REDOπLOCATE 23, 17: COLOR 11: PRINT "Sorry, you lost this time, but please try again!"πMONEY = MONEY - BIDπSLEEP 4πGOTO REDOππDavid Carlton                  THE BIOTECH INSTITUTE          pvhsa07@ll.kcts.org            03-09-96 (23:31)       QB, QBasic, PDS        370  24906    BIOTECH.BAS REM                            InstructionsπREM                                forπREM                        The Biotech InstituteπREM                            Version 1.2πREM              πREM    This program was originally created for my biology semesterπREM    project. Keep in mind I thought of the program firstπREM    and the story later. OK here's the story (don't laugh): Your fatherπREM    works at this place called the Biotech Institute. Somehow, you wereπREM    forgotten and left after the lights were turned out. With your trustyπREM    flashlight and piece of paper for a map, you are determined to findπREM    your way out in time for dinner. As this is a biology project, youπREM    may be wondering where biology comes into all this. It just so happensπREM    there are a great many doors in the building. Since everyone who worksπREM    in the building has at least a masters degree in biological chemistry,πREM    botany, and stuff like that, you are required to answer a biologyπREM    question to get through each door, (it's what they call security).πREM    To add a little challenge in case you think the questions areπREM    too easy (you probably won't have that opinion after playing theπREM    game for a little while) some of the doors require a passcard.πREM    The passcards, which are numbered, are scattered aroundπREM    on the floor here and there. Some of them you will be able to seeπREM    before you pick them up. Others will be right on the other side of aπREM    door. So be sure to check the bottom of the screen for messages. NowπREM    it's time to move on to playing the game. The arrow keys are usedπREM    for moving around, (if you are using the ten key pad be sureπREM    the num lock is off). The up and down keys move you forward andπREM    backward correspondingly, while the left and right keysπREM    rotate you in one spot. The controls will take a bit of gettingπREM    used to. Pay attention! this is an important function!πREM    A map of where you have been (or rather where you have looked)πREM    will be displayed when you press the "m" button. On the map you areπREM    represented by a plus sign in one of the squares. The elevatorsπREM    (of course there are elevators) are shown as x's on the map. PleaseπREM    note that the doors are not displayed on the map. Just so you know,πREM    north is up on the map (the direction you are facing is shown atπREM    the bottom of the normal screen). The next command is the inventoryπREM    command. Press "i" to see a list of the passcards you are carrying. YouπREM    can save your game by pressing the "s" button. Your game will be savedπREM    in a text file which will be placed in the file where your runningπREM    directory is located. Pressing "l" will prompt you to enter the name ofπREM    the file to be loaded. The last option is the "quit" option which isπREM    used if you want to stop before finishing the game. Press "q" to beπREM    asked if you want to quit. This can also be used to "pause" the gameπREM    since time stops until you answer. Time also stops during questions,πREM    which are all multi-choice. The clock is ticking for the restπREM    of the time. If you are wondering what time has to do with theπREM    game, I'll let you know that one of the points given at the endπREM    of the game has to do with your time. The percentage ofπREM    questions you got right is also displayed at the end of the game.πREM    All computers are not created equal, and your computer is probablyπREM    not the same speed as my computer(an Intel 486sx). To acomadate forπREM    this, I have added a wait adjustment option. Press "w" toπREM    pick the speed that suits you best. For instance, the "slow"πREM    speed would best suit a Pentium or similar computer.πREM    Any other commands will be explained when the time comes toπREM    use them. One hint: messages on the walls won't be displayedπREM    normally. You have to get really close to see them. Feel free to lookπREM    through the program listing and examine the notes on routines, butπREM    please don't alter the program or look at the last bunch of dataπREM    (Looking at the questions and answers is considered cheating!)πREM    If you have any questions, suggestions for improvments, or justπREM    want to let me know that you liked the game, send E-mail to David atπREM    pvhsa07@ll.kcts.org . Good luck, and watch out for Grendel.πREMπREM                          Press F5 to start.πππππREM    The Biotech Institute written by David Carlton in Qbasic. David isπREM      twelve years old and lives in Seattle, WA. He is interested inπREM                computer programming as a profession.πREMπREM                                 VVVπREM                                 VVVπREM                                 VVVπREM                               VVVVVVVπREM                                 \V/πππππREM openingππON ERROR GOTO 5250πSCREEN 12: SCREEN 0: COLOR 7πFOR i = 1 TO 10: PRINT : NEXT iπPRINT TAB(27); "The Biotech Institute": PRINT TAB(29); "By David Carlton": FOR i = 1 TO 10000: NEXT iππREM initializationππDIM w(4): DIM r(3): DIM rs(3): DIM rr(4, 6, 6): DIM q$(40): DIM qa(40): DIM pc(7): DIM rb(4, 6, 6): DIM qc(4): DIM qf(4)πr(1) = 2: r(2) = 1: r(3) = 1: d = 2: pr = 1: w = 1πFOR i = 1 TO 4πFOR j = 1 TO 6πFOR k = 1 TO 6πREAD rr(i, k, j)πNEXT kπNEXT jπNEXT iπFOR i = 1 TO 40πREAD q$(i): READ qa(i)πNEXT iππREM call to graphics routineππ100 SCREEN 1: SCREEN 12πGOSUB 1000πrs(1) = r(1): rs(2) = r(2): rs(3) = r(3):  VIEW PRINT (27) TO (30)πGOSUB 5000ππREM passcard, elevator, and item checkππrb(r(1), r(2), r(3)) = 1πrt = rr(r(1), r(2), r(3))πIF rt = rr(2, 2, 2) OR rt = rr(2, 5, 2) OR rt = rr(2, 5, 5) OR rt = rr(2, 1, 6) THEN IF jr <> 1 THEN PRINT "elevator up": jr = 1: r(1) = r(1) + 1: FOR i = 1 TO 10000 * w: NEXT i: GOTO 100πIF rt = rr(2, 5, 6) OR rt = rr(1, 3, 4) OR rt = rr(1, 4, 6) OR rt = rr(3, 1, 5) THEN IF jr <> 1 THEN PRINT "elevator up": r(1) = r(1) + 1: jr = 1: FOR i = 1 TO 10000 * w: NEXT i: GOTO 100πIF rt = rr(2, 3, 4) OR rt = rr(2, 4, 6) OR rt = rr(3, 2, 2) OR rt = rr(3, 5, 2) THEN IF jr <> 1 THEN PRINT "elevator down": r(1) = r(1) - 1: jr = 1: FOR i = 1 TO 10000 * w: NEXT i: GOTO 100πIF rt = rr(3, 5, 5) OR rt = rr(3, 1, 6) OR rt = rr(3, 5, 6) OR rt = rr(4, 1, 5) THEN IF jr <> 1 THEN PRINT "elevator down": jr = 1: FOR i = 1 TO 10000 * w: NEXT i: GOTO 100πIF rt = rr(2, 2, 4) AND pc(1) <> 1 THEN PRINT "You picked up passcard 1": pc(1) = 1: rr(2, 2, 4) = rr(2, 2, 4) - 4096πIF rt = rr(1, 2, 6) AND pc(2) <> 1 THEN PRINT "You picked up passcard 2": pc(2) = 1: rr(1, 2, 6) = rr(1, 2, 6) - 4096πIF rt = rr(1, 3, 1) AND pc(3) <> 1 THEN PRINT "You picked up passcard 3": pc(3) = 1: rr(1, 3, 1) = rr(1, 3, 1) - 4096πIF rt = rr(3, 1, 2) AND pc(4) <> 1 THEN PRINT "You picked up passcard 4": pc(4) = 1: pr = 2: rr(3, 1, 2) = rr(3, 1, 2) - 4096πIF r(1) = 3 AND r(2) = 1 AND r(3) = 4 AND pc(5) <> 1 THEN PRINT "You picked up passcard 5": pc(5) = 1: rr(3, 1, 4) = rr(3, 1, 4) - 4096πIF rt = rr(4, 6, 4) AND pc(6) <> 1 THEN PRINT "You picked up passcard 6": pc(6) = 1: rr(4, 6, 4) = rr(4, 6, 4) - 4096πIF r(1) = 2 AND r(2) = 3 AND r(3) = 5 AND pc(7) <> 1 THEN PRINT "You picked up passcard 7": pc(7) = 1: rr(2, 3, 5) = rr(2, 3, 5) - 4096πIF r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "There is a map of level 2 on the wall. Press G to glance at it."πIF r(1) = 4 AND r(2) = 1 AND r(3) = 5 THEN pr = 3πIF r(1) = 4 AND r(2) = 6 AND r(3) = 6 THEN SCREEN 0: COLOR 7: PRINT "Yeah! You made it out.": GOTO 5500ππREM playing screen setupππPRINT "level "; r(1); "  "; r(2); ","; r(3); "   ";πIF d = 1 THEN PRINT "north";πIF d = 2 THEN PRINT "east";πIF d = 3 THEN PRINT "south";πIF d = 4 THEN PRINT "west";πPRINT "    What now?"ππREM keyboard checkππ105 in$ = INKEY$πIF RIGHT$(in$, 1) = CHR$(72) OR RIGHT$(in$, 1) = CHR$(80) THEN GOTO 155πIF RIGHT$(in$, 1) = CHR$(77) THEN d = d + 1: IF d = 5 THEN d = 1πIF RIGHT$(in$, 1) = CHR$(75) THEN d = d - 1: IF d = 0 THEN d = 4πIF RIGHT$(in$, 1) = CHR$(77) OR RIGHT$(in$, 1) = CHR$(75) THEN GOTO 100πIF in$ = "g" AND r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "I~~~~~~~~~~~I": m = 1: FOR i = 1 TO 100: NEXT iπIF in$ = "g" AND r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "I I~I I~~~I I": FOR i = 1 TO 1000 * w: NEXT iπIF in$ = "g" AND r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "I I   I  ~~ I": FOR i = 1 TO 1000 * w: NEXT iπIF in$ = "g" AND r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "I ~~I~~ I~~~~": FOR i = 1 TO 1000 * w: NEXT iπIF in$ = "g" AND r(1) = 1 AND r(2) = 2 AND r(3) = 5 AND d = 2 THEN PRINT "I___I~~~~": PRINT "What now?"πIF in$ = "i" THEN GOSUB 144πIF in$ = "m" THEN GOTO 3000πIF in$ = "l" THEN INPUT "Are you sure you want to load a different game?(y or n)"; in$: IF in$ = "y" THEN GOTO 5300 ELSE PRINT "What now?"πIF in$ = "s" THEN INPUT "Are you sure you want to save this game?(y or n)"; in$: IF in$ = "y" THEN GOSUB 5200 ELSE PRINT "What now?"πIF in$ = "w" THEN INPUT "What waiting interval would you like?(1)fast (2)normal (3)slow"; in: ON in GOTO 130, 131, 132πIF in$ = "q" THEN INPUT "Are you sure you want to quit?(y or n)"; in$: IF in$ = "y" THEN PRINT "Bye!": PRINT : PRINT : END ELSE PRINT "What now?"πt = t + 1 * wπGOTO 105ππREM wait set routineππ130 w = .1: GOTO 133π131 w = 1: GOTO 133π132 w = 3: GOTO 133π133 PRINT "What now?": GOTO 105ππREM inventory routineππ144 PRINT "You are carrying passcard(s): ";πIF pc(1) = 1 THEN PRINT "1 ";πIF pc(2) = 1 THEN PRINT "2 ";πIF pc(3) = 1 THEN PRINT "3 ";πIF pc(4) = 1 THEN PRINT "4 ";πIF pc(5) = 1 THEN PRINT "5 ";πIF pc(6) = 1 THEN PRINT "6 ";πIF pc(7) = 1 THEN PRINT "7 ";πPRINT : PRINT "What now?": RETURNππREM locked door checkππ145 lk = 0: na = 0πIF r(1) = 3 AND r(2) = 2 AND r(3) = 3 AND wd = 2 OR r(1) = 3 AND r(2) = 3 AND r(3) = 3 AND wd = 4 OR r(1) = 3 AND r(2) = 3 AND r(3) = 4 AND wd = 2 THEN IF pc(1) = 1 THEN lk = 1 ELSE na = 1πIF r(1) = 3 AND r(2) = 4 AND r(3) = 4 AND wd = 4 OR r(1) = 3 AND r(2) = 5 AND r(3) = 4 AND wd = 2 OR r(1) = 3 AND r(2) = 6 AND r(3) = 4 AND wd = 4 THEN IF pc(1) = 1 THEN lk = 1 ELSE na = 1πIF r(1) = 3 AND r(2) = 2 AND r(3) = 4 AND wd = 4 OR r(1) = 3 AND r(2) = 1 AND r(3) = 4 AND wd = 2 THEN IF pc(2) = 1 THEN lk = 1 ELSE na = 2πIF r(1) = 3 AND r(2) = 1 AND r(3) = 3 AND wd = 1 OR r(1) = 3 AND r(2) = 1 AND r(3) = 2 AND wd = 3 OR r(1) = 3 AND r(2) = 3 AND r(3) = 4 AND wd = 4 OR r(1) = 3 AND r(2) = 2 AND r(3) = 4 AND wd = 2 OR r(1) = 3 AND r(2) = 5 AND r(3) = 3 AND wd = 4 OR r(1) = 3 AND r(2) = 4 AND r(3) = 3 AND wd = 2 OR r(1) = 3 AND r(2) = 6 AND r(3) = 3 AND wd = 1 OR r(1) = 3 AND r(2) = 6 AND r(3) = 2 AND d = 3 THEN IF pc(3) = 1 THEN lk = 1 ELSE na = 3πIF r(1) = 1 AND r(2) = 1 AND r(3) = 4 AND wd = 3 OR r(1) = 1 AND r(2) = 1 AND r(3) = 5 AND wd = 1 THEN IF pc(4) = 1 THEN lk = 1 ELSE na = 4πIF r(1) = 1 AND r(2) = 3 AND r(3) = 6 AND wd = 2 OR r(1) = 1 AND r(2) = 4 AND r(3) = 6 AND wd = 4 THEN IF pc(5) = 1 THEN lk = 1 ELSE na = 5πIF r(1) = 2 AND r(2) = 4 AND r(3) = 5 AND wd = 4 OR r(1) = 2 AND r(2) = 3 AND r(3) = 5 AND wd = 2 OR r(1) = 4 AND r(2) = 3 AND r(3) = 4 AND wd = 2 OR r(1) = 4 AND r(2) = 4 AND r(3) = 4 AND wd = 4 OR r(1) = 4 AND r(2) = 4 AND r(3) = 6 AND wd = 2 OR r(1) = 4 AND r(2) = 5 AND r(3) = 6 AND wd = 4 THEN IF pc(6) = 1 THEN lk = 1 ELSE na = 6πIF r(1) = 4 AND r(2) = 6 AND r(3) = 5 AND wd = 3 THEN IF pc(7) = 1 THEN lk = 1 ELSE na = 7πIF na <> 0 THEN PRINT "Access denied. Passcard"; na; "required": PRINT "What now?"πRETURNππREM question routineππ150 rn = INT(t / 14)π151 IF rn > 40 THEN rn = INT(rn - 40): GOTO 151πPRINT q$(rn); : INPUT aw: IF rn = 21 THEN qc(pr) = qc(pr) + 1: qc(4) = qc(4) + 1: w(wd) = 0: PRINT "What now?": RETURNπIF aw = qa(rn) THEN w(wd) = 0: qc(pr) = qc(pr) + 1: qc(4) = qc(4) + 1: PRINT "What now?": RETURNπqf(pr) = qf(pr) + 1: qf(4) = qf(4) + 1: qc(pr) = qc(pr) + 1: qc(4) = qc(4) + 1πPRINT "Nope.": PRINT "What now?": RETURNππREM moving routineππ155  IF RIGHT$(in$, 1) = CHR$(80) THEN wd = d + 2: IF wd > 4 THEN wd = wd - 4πIF RIGHT$(in$, 1) = CHR$(72) THEN wd = dπIF w(wd) = 1 THEN PRINT "There's a wall in the way": PRINT "What now?"πIF w(wd) = 2 THEN GOSUB 150: IF w(wd) = 2 THEN GOTO 105πIF w(wd) = 3 THEN GOSUB 145: IF lk = 1 THEN GOSUB 150: IF w(wd) = 3 THEN GOTO 105πIF w(wd) <> 0 THEN GOTO 105πjr = 0πIF wd = 1 THEN r(3) = r(3) - 1: GOTO 100πIF wd = 2 THEN r(2) = r(2) + 1: GOTO 100πIF wd = 3 THEN r(3) = r(3) + 1: GOTO 100πIF wd = 4 THEN r(2) = r(2) - 1: GOTO 100ππREM graphics routineππ1000 rd = 0: rs(1) = r(1): rs(2) = r(2): rs(3) = r(3): COLOR r(1): GOSUB 5000πx5 = 0: y5 = 0: x6 = 400: y6 = 0: x7 = 400: y7 = 400: x8 = 0: y8 = 400: cx = 200: cy = 200πIF w(d) = 1 THEN GOSUB 2000: RETURNπIF w(d) = 2 OR w(d) = 3 THEN GOSUB 2500: RETURNπx1 = 0: y1 = 0: x2 = 400: y2 = 0: x3 = 400: y3 = 400: x4 = 0: y4 = 400: x5 = 100: y5 = 100: x6 = 300: y6 = 100: x7 = 300: y7 = 300: x8 = 100: y8 = 300π1500 rd = rd + 1: IF d = 1 THEN rs(3) = r(3) - rdπIF d = 2 THEN rs(2) = r(2) + rdπIF d = 3 THEN rs(3) = r(3) + rdπIF d = 4 THEN rs(2) = r(2) - rdπGOSUB 5000: rb(rs(1), rs(2), rs(3)) = 1πIF sp = 1 THEN GOSUB 2900πwd = d - 1: IF wd = 0 THEN wd = 4πIF w(wd) = 1 THEN GOSUB 2100πIF w(wd) = 2 OR w(wd) = 3 THEN GOSUB 2600πwd = d + 1: IF wd = 5 THEN wd = 1πIF w(wd) = 1 THEN GOSUB 2200πIF w(wd) = 2 OR w(wd) = 3 THEN GOSUB 2700πIF sp = 1 THEN GOSUB 2900πIF w(d) = 1 THEN GOSUB 2000: RETURNπIF w(d) = 2 OR w(d) = 3 THEN GOSUB 2500: RETURNπIF rd = 7 THEN RETURNπx1 = x5: y1 = y5: x2 = x6: y2 = y6: x3 = x7: y3 = y7: x4 = x8: y4 = y8πx5 = INT(((cx - x1) / 2) + x1): y5 = (((cy - y1) / 2) + y1): x6 = INT(((x2 - cx) / 2) + cx): y6 = INT(((cy - y2) / 2) + y2)πx7 = INT(((x3 - cx) / 2) + cx): y7 = INT(((y3 - cy) / 2) + cy): x8 = INT(((cx - x4) / 2) + x4): y8 = INT(((y4 - cy) / 2) + cy)πGOTO 1500π2000 LINE (x5, y5)-(x6, y6): LINE (x6, y6)-(x7, y7): LINE (x7, y7)-(x8, y8): LINE (x8, y8)-(x5, y5): RETURNπ2100 LINE (x1, y1)-(x5, y5): LINE (x5, y5)-(x8, y8): LINE (x8, y8)-(x4, y4): LINE (x4, y4)-(x1, y1): RETURNπ2200 LINE (x6, y6)-(x2, y2): LINE (x2, y2)-(x3, y3): LINE (x3, y3)-(x7, y7): LINE (x7, y7)-(x6, y6): RETURNπ2500 LINE (x5, y5)-(INT(((cx - x5) / 2) + x5), y5): LINE (INT(((cx - x5) / 2) + x5), y5)-(INT(((cx - x8) / 2) + x8), y8): LINE (INT(((cx - x8) / 2) + x8), y8)-(x8, y8): LINE (x8, y8)-(x5, y5)πLINE (x6, y6)-(INT(((x6 - cx) / 2) + cx), y6): LINE (INT(((x6 - cx) / 2) + cx), y6)-(INT(((x7 - cx) / 2) + cx), y7): LINE (INT(((x7 - cx) / 2) + cx), y7)-(x7, y7): LINE (x7, y7)-(x6, y6): RETURNπ2600 LINE (x1, y1)-(INT(((x5 - x1) / 4) + x1), INT(((y5 - y1) / 4) + x1)): LINE (INT(((x5 - x1) / 4) + x1), INT(((y5 - y1) / 4) + x1))-(INT(((x8 - x4) / 4) + x4), INT((((y4 - y8) / 4) * 3) + y8))πLINE (INT(((x8 - x4) / 4) + x4), INT((((y4 - y8) / 4) * 3) + y8))-(x4, y4): LINE (x4, y4)-(x1, y1)πLINE (INT((((x5 - x1) / 4) * 3) + x1), INT((((y5 - y1) / 4) * 3) + x1))-(x5, y5): LINE (x5, y5)-(x8, y8)πLINE (x8, y8)-(INT((((x8 - x4) / 4) * 3) + x4), INT(((y4 - y8) / 4) + y8)): LINE (INT((((x8 - x4) / 4) * 3) + x4), INT(((y4 - y8) / 4) + y8))-(INT((((x5 - x1) / 4) * 3) + x1), INT((((y5 - y1) / 4) * 3) + y1)): RETURNπ2700 LINE (x6, y6)-(INT(((x2 - x6) / 4) + x6), INT((((y6 - y2) / 4) * 3) + y2)): LINE (INT(((x2 - x6) / 4) + x6), INT((((y6 - y2) / 4) * 3) + y2))-(INT(((x3 - x7) / 4) + x7), INT(((y3 - y7) / 4) + y7))πLINE (INT(((x3 - x7) / 4) + x7), INT(((y3 - y7) / 4) + y7))-(x7, y7): LINE (x7, y7)-(x6, y6)πLINE (x2, y2)-(x3, y3): LINE (x3, y3)-(INT((((x3 - x7) / 4) * 3) + x7), INT((((y3 - y7) / 4) * 3) + y7))πLINE (INT((((x3 - x7) / 4) * 3) + x7), INT((((y3 - y7) / 4) * 3) + y7))-(INT((((x2 - x6) / 4) * 3) + x6), INT(((y6 - y2) / 4) + y2)): LINE (INT((((x2 - x6) / 4) * 3) + x6), INT(((y6 - y2) / 4) + y2))-(x2, y2): RETURNπ2900 LINE (INT((((cx - x8) / 4) * 3) + x8), INT(((y4 - y8) / 3) + y8))-(INT(((x7 - cx) / 4) + cx), INT(((y4 - y8) / 3) + y8)): LINE (INT(((x7 - cx) / 4) + cx), INT(((y4 - y8) / 3) + y8))-(INT(((x7 - cx) / 2) + cx), INT(((y3 - y7) / 2) + y7))πLINE (INT(((x7 - cx) / 2) + cx), INT(((y3 - y7) / 2) + y7))-(INT(((cx - x8) / 2) + x8), INT(((y4 - y7) / 2) + y7)): LINE (INT(((cx - x8) / 2) + x8), INT(((y4 - y7) / 2) + y7))-(INT((((cx - x8) / 4) * 3) + x8), INT(((y4 - y8) / 3) + y8)): RETURNππREM map routineππ3000 SCREEN 1: SCREEN 12πx1 = 0: y1 = 0: x2 = 50: y2 = 0: x3 = 50: y3 = 50: x4 = 0: y4 = 50: COLOR r(1)πFOR i = 1 TO 6πFOR j = 1 TO 6πIF j = r(2) AND i = r(3) THEN LINE (25 + x1, y1)-(25 + x1, y4): LINE (x1, 25 + y1)-(x2, 25 + y1)πIF rb(r(1), j, i) <> 1 THEN GOTO 3010πrs(1) = r(1): rs(2) = j: rs(3) = i: GOSUB 5000πIF w(1) = 1 THEN LINE (x1, y1)-(x2, y2)πIF w(2) = 1 THEN LINE (x2, y2)-(x3, y3)πIF w(3) = 1 THEN LINE (x4, y4)-(x3, y3)πIF w(4) = 1 THEN LINE (x1, y1)-(x4, y4)πIF sp = 2 OR sp = 3 THEN LINE (x1, y1)-(x3, y3): LINE (x2, y2)-(x4, y4)π3010 x1 = x2: x4 = x3: x2 = x2 + 50: x3 = x3 + 50πNEXT jπx1 = 0: x2 = 50: x3 = 50: x4 = 0: y1 = y4: y2 = y3: y4 = y4 + 50: y3 = y3 + 50πNEXT iπFOR i = 1 TO 19: PRINT : NEXT i: PRINT "Press any key."π3020 in$ = INKEY$πIF in$ <> "" THEN GOTO 100πt = t + 1 * wπGOTO 3020ππREM data reading routineππ5000 s = rr(rs(1), rs(2), rs(3))πsp = INT(s / 4096)πs = s - (sp * 4096)πw(1) = INT(s / 512)πs = s - (w(1) * 512)πw(2) = INT(s / 64)πs = s - (w(2) * 64)πw(3) = INT(s / 8)πs = s - (w(3) * 8)πw(4) = INT(s)πRETURNππREM save/load routineππ5200 INPUT "What name do you want to give the file"; n$πOPEN n$ FOR OUTPUT AS #1πPRINT #1, pr, d, m, t, jr, w, r(1), r(2), r(3)πFOR i = 1 TO 7πPRINT #1, pc(i)πNEXT iπFOR i = 1 TO 4πPRINT #1, qc(i), qf(i)πNEXT iπFOR i = 1 TO 4πFOR j = 1 TO 6πFOR k = 1 TO 6πPRINT #1, rr(i, j, k), rb(i, j, k)πNEXT kπNEXT jπNEXT iπCLOSEπPRINT "What now?"πRETURNπ5250 PRINT "I couldn't find that file.": PRINT "What now?": RESUME 105π5300 INPUT "What file do you want to load"; n$πOPEN n$ FOR INPUT AS #1πINPUT #1, pr, d, m, t, jr, w, r(1), r(2), r(3)πFOR i = 1 TO 7πINPUT #1, pc(i)πNEXT iπFOR i = 1 TO 4πINPUT #1, qc(i), qf(i)πNEXT iπFOR i = 1 TO 4πFOR j = 1 TO 6πFOR k = 1 TO 6πINPUT #1, rr(i, j, k), rb(i, j, k)πNEXT kπNEXT jπNEXT iπCLOSEπGOTO 100ππREM endgame routineππ5500 PRINT "You got"; (INT(((qc(1) - qf(1)) * 100) / qc(1))); "% of the questions right in the first part of the game."πPRINT "You got"; (INT(((qc(2) - qf(2)) * 100) / qc(2))); "% of the questions right in the middle section of the game."πPRINT "You got"; (INT(((qc(3) - qf(3)) * 100) / qc(3))); "% of the questions right in the final third of the game."πPRINT "You got"; (INT(((qc(4) - qf(4)) * 100) / qc(4))); "% of the questions right total."πs = 0πIF m = 1 THEN s = s + 1πIF qf(4) = 0 THEN s = s + 1πIF t <= 30000 THEN s = s + 1πIF s = 3 THEN PRINT "You're a real maze master now, and you learned plenty of biology facts along theway!": ENDπPRINT "Your score was"; s; ". The best possible score is 3.": PRINT "Don't feel bad if you didn't get any points.": PRINT "They're only for ambitious people who want to do the best possible.": ENDππREM room dataππDATA 641,578,4745,522,648,578,65,65,513,528,584,65,81,9,72,1025,576,65,1049,576,8713,0,128,74,1601,73,641,10,80,577,9,4680,201,8779,1033,72πDATA 513,520,512,520,520,576,65,8769,65,513,8776,65,65,137,74,1,520,72,1,4672,12809,72,593,593,9,72,4745,651,9290,1089,8841,522,520,12872,8713,72πDATA 649,522,528,576,521,592,4697,12809,1088,73,12865,1113,1545,712,75,713,67,1601,4809,715,715,651,202,67,8713,520,512,520,12872,65,12809,520,8,520,12872,73πDATA 513,648,522,592,529,592,17,584,521,1096,1105,1089,1089,641,522,648,1098,65,137,66,705,651,586,4169,12865,129,82,649,642,602,9,72,1161,714,75,1609ππREM  DON'T LOOK AT THESE! THEY'RE THE QUESTIONS AND ANSWERS!ππDATA "Which plant is NOT an example of a vegetativly propigating plant?(1)dandelion   (2)strawberry (3)potato (4)tulip",1,"Which type of plant germinates with the seed above ground?(1)monocot (2)dicot   (3)nonvascular (4)fibrous root plants",2,"What is the name of a new growth on a fern(1)fernling (2)frond (3)endosperm     (4)fiddlehead",4,"What is the underground part of the fern called?(1)sorus (2)root (3)rhizome     (4)internode",3,"What are the brown dots on the underside of a fern blade called?(1)spores       (2)sori (3)sporangia (4)zygotes",2πDATA "What is a dicotyledone characteristic?(1)roots are usually fibrous              (2)seeds contain one cotyledon (3)flower parts usually occur in multiples of    four or five (4)leaves have parallel veins",3,"What is a cotyledon?(1)a plant with one seed leaf (2)a plant with two seed      leaves (3)the seed leaf of a plant (4)a plant that has its seeds enclosed",3,"What type of venation is NOT common with dicots?(1)palmate (2)pinnate           (3)palisade (4)parallel" ,4,"What is the name for the center part of a woody stem?(1)pith (2)vascular        cambium (3)inner bark (4)cortex",1,"What is the name of the matter between the cork and the cortex of a woody stem? (1)bark (2)cork cambium (3)inner bark (4)phloem",2πDATA "What is the end of a root called?(1)epidermis (2)zone of maturation (3)sepal    (4)apical meristem",4,"What is the middle section of a root called?(1)zone of maturation (2)zone of    elongation (3)root hairs (4)apical meristem",2,"What is the part of the root closest to the plant body called?(1)zone of        maturation (2)apical meristem (3)style (4)root hairs",1,"Does David have to do his Shakespear assignment?(1)yes (2)no (3)maybe (4)wait a while",1,"What is the surface of the tip of a root called?(1)cork (2)cambium (3)root cap  (4)anther",3πDATA "What is(are) on the surface of the part of the root closest to the plant body?  (1)cambium (2)filaments (3)root cap (4)root hairs",4,"What are the individual leaves on the buds of a flower called?(1)petals (2)bud  leaves (3)pistils (4)sepals",4,"What is the end bud on a woody stem called?(1)terminal bud (2)lateral bud       (3)node (4)bud scale",1,"Which is the closest to the outside of a woody stem?(1)pith (2)phloem           (3)vascular cambium (4)vascular ray",2,"Which is closest to the center of a woody stem?(1)cork cambium (2)cork          (3)cortex (4)inner bark",3πDATA "Should David get an A on this project?(1)yes (2)of course (3)why certainly      (4)who would give him anything else",4,"Which plant group is a walnut tree in?(1)Rosaceae (2)Compositae                 (3)Juglandaceae (4)Aceraceae",3,"Which plant group does the banana belong to?(1)Gramineae (2)Rosaceae            (3)Iridaceae (4)Musaceae",4,"Which plant group does the maple belong to?(1)Aceraceae (2)Palmaceae            (3)Fabaceae (4)Solanaceae",1,"Which plant group does the tomato belong to?(1)Rosaceae (2)Solanaceae           (3)Cactaceae (4)Iridaceae",2,"Which plant group does the pea belong to?(1)Juglandaceae (2)Fabaceae            (3)Aceraceae (4)Palmaceae",2πDATA "Which group name is the most specific?(1)the phylum (2)the order (3)the kingdom (4)the family",4,"What part of the flower does the fruit come from?(1)ovary (2)style (3)ovule (4) pistil",1,"Which part of a woody stem's vascular system carries water and minerals from    the roots to the leaves?(1)phloem (2)cambium (3)xylem (4)vascular cambium",3,"What is an endosperm?(1)a plant with exposed seeds (2)the seed leaf of a plant  (3)a plant that makes reproductive cells (4)the food stored in the seed of a    plant",4πDATA "Which part of a woody stem's vascular system carries food manufactured in the   leaf to other parts of the plant?(1)phloem (2)vascular cambium (3)pith (4)xylem",1,"Which part of the leaf regulates the flow of gases?(1)palisade parenchyma       (2)stomata (3)guard cells (4) cuticle",3,"What is the chemical formula for photosynthesis?(1)energy+o6=h2o7+co2 (2)       6co2+12h20+energy=c6h12o6+6h2o+6o2 (3)h13+h6o9c4+energy=12h2o+o9+co2+ho10 (4)   h2o+energy=h2+o",2,"What type of venation does the Bigleaf Maple have?(1)palmate (2)whorled         (3)parrallel (4)pinnate",1,"What type of venation does a blade of grass have?(1)palmate (2)whorled (3)      pinnate (4)parrallel",4πDATA "What type of venation does a Pacific Dogwood have?(1)palmate (2)whorled (3)     pinnate (4)parrallel",3,"What is contained in each pollen grain?(1)sporangium (2)sporophyte (3)gamete (4)egg",3,"How many different species of plants are there in the phylum Anthophyta?(1)     12,000 (2)700 (3)1,750 (4)250,000",4,"Which one of these is a monocot characteristic?(1)leaves have netted veins      (2)flower parts usually occur in three's or six's (3)roots are usually taproots (4)young stems have vascular bundles in a ring",2,"What are the small cuplike structures on a liverwort called?(1)gemma cups (2)   gametophytes (3)gemmae (4)rhizoids",1ππJonathan Hopkinson             DUNGEON RPG GAME               www.smartlink.net              01-01-94 (02:24)       QB, QBasic, PDS        240  15765    DUNG.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"DUNGEON.ZIP",4^6:Z&=11555:?STRING$(50,177);πU"%up()%9%%%%-%58IFA3+4kg\%.%%:&%%%+%%%%gf%xttt)D_$3'=E1iAJIS$eI/πU"R<=LfWIpLoAr>ZQ_H5%Sd*p=\$R[uW'**&'5PdsAntG8&BW%NX7W7=)kS3)FvAZπU"B4U>%&dh*p7arI9lI0UpBDNklg1sgUW^1CL#e[7d97rk6-?S]3iBvNP7#1<7Y04πU"U#vjURWITh'eQk(loKc(+$Bmxpr_Nw]%*up(%)9%%%%-%5[8FAiAWNwP#%%%+%&πU"%%)%%%%g#thfT[u$3<7U-VHfr7hXtOxGS&ji^eBGd;m+pdFwa*+5ha(1[MV9hJ_πU"u)8gdfUv1P#kf97GS&XB]QGC<JOhRCM<Wy(T2g7+'rN/+)vW3[;ED>Y&h;,Z84*πU"_$_Ki&L&o8qs^VoTt/w.X)++<tIXTvR&dc<)Nl1pAZ<<n5&%up()%9%%%%-%58RπU"FA5v2CRP%.%%)&%%%*%%%%ot#sjxD\_V3<[E1jpam2i_Cd/h9VBTWrn:$mu(h<qπU"G;z<m6YKjv[nTym[JZ*s7uQg($l\6PcT'E)xbo%0do35wCMR1up0;B2Df$-i\<JπU"3a1-54=6&&v[.Rg\rTn5Ge*e:3iN-Djgg-s)WFm3QpsF>D,yh6kWTVkb8X8Zdr%πU"%up()%9%%%%-%587FAwD.UzI%.%%%&%%%)%%%%oz.fsLu7n3=Ej14&[m8bt9a7/πU"TEjTsPW*sMr;+M&Y?a>\he#IuGAAbhMWTQdP#*gok-&7-C190z0**uS9?ph\U9rπU"-):<;gUKosI?mphd'hBV1T'=uT$?ah4KU?;CN(jDy83x.4ThoXF73bckn5jhE5eπU"t3HnK&%up()%9%%%%-%58RFAg;05pU%.%%5&%%%+%%%%xf%rfjq&<uf3]<E14OHπU"jXm&Lm'00ZBJfj44<h7dT)WCeyu?Fw#[9Axuf4&WeWW>]$r^b.h(%)kK;M#-AhXπU"[fQ+'k]cWTKL-.>gj&b5uk?9u>eWLEK%42P%LVcY*%:-RL/i%fZq(+8XZvtZ4uOπU"[Dth4_*PV0/B(qM[PTfK_yXJu_n&K&up%()9%%%%-%%58FA%#'e=&Q%%%&&&%%%πU"+%%%%yfjq.ts<u.n3TUa-V\b:J+,%X_X\.E9T$ri$.M9[3VV-,Sm2a[r>7bMX_PπU"0Ztf#He.#S=+Ehw-Wa,n]HY,9/Cvr:('(_2j2j++/S492;6ui7:R=KJmGnb*[.cπU":tT&Nv9-E+T1;UBw<Y-t&;gpdK?>s>0&1o:Q)T2$]8n=cwBD%up()%9%%%%-%58πU"7FAES60v%BR%%d>%%%0%%%%iz%sljt%sSgfaxNbvYBT1]$86Kx=(O(XZHW3(ldDπU"Ek6s3bK;=jTYTgJgEqJB8Ir+1d>Pe5ak?MpPD%fw7moJsSe*4hp#&*G&5'u'f%GπU"3Gl6;fvPH?1ru;3O;bl-IgACh7x(+n0*-86vMTR9x2rT*tx&9[Lj(c#j(O+/39YπU".#m3*?)EH(Luibs[Y9Kq=T:r:aX>5VEKZGXZngR\xqXbrJ9JvdDhWKMjj6[sfKnπU"_,Wq.wh2ismxhP\s-xn>K8<::*0Bf00]DTX;BZZ/L#V_+LTNrplA96K?nkP&Ii<πU"2aHcKdlX%-?YVq?FS'cL>m9b2-uFfM:q1it)?/W+*(Vn7*[>s<Mh4a&LK(4a#xKπU">4\atKRV3qMzBJD8/24<&nfT2GoWcTs-kwhhsk5cJ&u7$c4,_X4/RT3T=9(xk$4πU"RrD(hl.-UCye[dJTr4(:x(My/eYd*(r4^xt(E-_hM)#HoOsV_uuFNWsafFPoW'fπU"&G.7Z)3U#\?h/$[<PEc6fpaJ]RFLH&H<gb$&eHCa$t2kemBa0R(q#+pbY254SqFπU"figj7W,;K4pGFa.hSZoVJ54hSFfkogwWV=D[VHN5JSF>^ig6oWb;4:lGp-ohCZVπU"OH5JcqF^kg9v5hccZVL5NtSFncig8W>L;4tbGp.hXcZVvQ5tcF3xVG4a-h&Z7bEπU"5,kSpOi7C5W(E;JeG74-h&f^bo5R,d=J>niWLc5p.hPL;JnciWL5Tp.hLi;JnirπU"Wv5p4NhLPih6f\hj$akWn))W3$ZvRC+]F+P#F0Ahx0A^;09:V[JdRrGKm3=/bQ,πU"S,p6q^>KUZ*_++rSWP&$<&v(dh8J6<P6E^nsPvLPf')q44#34A+q=$AnubNrqQ\πU">N\V/Aj#JCr(DG$NcutcD/L9d'oi[<'RrWQieI6o]pZrRBfBp(:+XB0K,PXbRG/πU"cX0Ld*IeFP4$JrmO]YisUIhVcdaIs0,tGx8l>fX^QRV,G&\xZ^N($68ET-<K=p+πU"<8FQF7'YXmt%4GvPk>s]W<cUtKpJSebJP.$v9$4pE^We=hv^[^d)G%:D9'Bz:+5πU"qLId)-=nN]a0o#iHxPM63VoPUKvLT$O(;*dGg,rO)w2KSD_r?\I*D?qnM41f3>.πU".4Y-29k=ufPQ-^7([][AB(nz(DWR,=(#3<Q2/064rLOM&WVPeTsi[Z#<_x+lrM5πU"TCAGEH>k9,zMI>Sn=gf6Kp7\7*sa0p]I%O90_V88;^r+O5gS:l8rr4O+&^tdxU=πU"Ij0TpO0eT_kk8\7f75ar/lq8^1RgK=t,:tj\31nm/O2o&K19/h$+((;Sr5pk>#BπU"++f\PgJ0N^u0%u<^P1Nmw2Dawq+S?A+lh7L(iH3>^;fLr%p#v3.*=jIs,.T)PhjπU"QcAmk=kqF_-W:'P)7Gek4ByPVv?:NcP1xcXgo9Ne(<epTubZS0;^=Gi3_N\c8TSπU")N4WNu'RyzVg3$,K.-sBfn[h69.]Y%c?#R(U/WbkwO=C6fpaJ]RFLH&H<gb$&eHπU"Ca$t2kemBa0RHZ(;iM/[$0AL.q64Pj%f;,Zl&$B6CIqlTDM(O,1gdO]&)q;VFv-πU"=?ndWi3^enWd,5+IkXg=o>1*bsL-9/#4T&d(7cWw\,vE;([O8p+,B2-bc*_=i+UπU"_>BmB8s(wOmxIoHTGMarx;-+?aN32fA6XjIF5<.1R;rK*I^MQ*QS0B0iFnfaJM+πU"D['c(j(=Ja*5wQDq5m.(&T0(4>>Au(Gva^G>[Og_?</m=7r8Zh[M\*#Wo#WQx&BπU"8_fOpJ<Z\kI6MkmG*ty3MFW8i;QF*.87R9M%ijZEoTIV*4Zj&L;Dd5;+hh\w%nPπU"_9RW<#XvWDhG=Ou$UBtr+#+l9Xq&/tr4K7oG,UhmRZVC]j?71fdxi%<N0>rizSvπU"NGejwD(u'99#1T,V-qZUHP/v,SS8vIiG%;G+.:DK%DJma1Xj)QBmw0:\Lr\9B+-πU"ge?jUrnezN?n/8acy#6\nZ4*#8>4XcIY$rKR)Uk&$kBO3f,av=nfqG9C3hqRTa4πU"[=nOMosMGk_eh'81O[_K(R:AgRzT7ViwuzY)N=9f]1HRA]0a\I(RGuoUG.>#E2)πU"2LG:,6t0hrK[+k;Pk?>n]f%iSeO&ToIg8yGrQ/5vH-Z5IFJJ'n?UMeH8#[RDD,xπU"TPNAW[Q0Wc5M&U3rJ+e.2zX_q728:gJtpWKx>Ludi9Tbx_Mn-<L78ky1wn?/ET?πU"JI6=N=PF>x1b[X$DI'Ne_ne6DLHG/#(&Hy9e#WVFE3%1('Vl]K[_J4+E>_&n+I2πU"WN.EnmqEcbI.%K2mw1EbUIJxTb]Azozd6m&u0iVGyKAow-uiQjtbFtShP8iin:.πU"s:H#pTf+EfY^43gd%5x1^4Id>%_Y^G4sd%H_i^4d+d%_rjBCeNx'hVs,^,M#OHNπU".ekCKLV5hK,_0:r6nGLrr3OT<,iWcI6L9,Q5.)TtMFiQ--JfxXo+NBN&BWe%vb&πU"$'M3b(/bg/J+<?SasZ9edf5\P+V)Oem8H^AqQI8DQ9(X/eo9;/*Rhs21'/;6zoVπU"G4Mx4l$Q&XmsE#W*R95[1?y*yAXJ62]<vNK#bAI4Z37nw7Q;n_2t^%te8?d2G1SπU"*64Uey_9DvSz)2BDZ_0+^wU69Go:[[v*WE(BL:dFN;82Em?QMV)f58AY](r)_iqπU".wQ1kS0#wkEjrLQK/(RL7slNI8K,<tZ^O2h*izaC4Tw[?d'Q>Nac^TroZs6oU>MπU"c8>Epk]1Z=/4scCw;p&iVi6^/,*O:9me4xo3L+yzrHGK,rm^'2p*ks:ljloC]24πU"C*Yh$LTU1\_LB:^Z$0g0Eo)SN\)RC/*=p2CZgkGp(M[R1/vY?;aHrW5U1WD%H8LπU",oId#$aR/v&BC&pC)M8L5wI>1Nm0TM<<GfP%zphc>%Ah2c]\/r8LQs#j;b)Z/fPπU"RA_g7/cLy9i)D$989*^(%W*2w]E(8;O13[3QZW_'6&qp+5uRVS-HExK[_#*V<F0πU"+f3/&4hO&Qv8a\>ftQEtakXDgkv%Nl>3R\/F,gli9Y[&;FOr)RQo;C\b9v/[([EπU")]b_oMa/Q)e=89b[6[xF%#3Mj8+_)e2+.MOrbqf31J2'FZgZ0#+4(MpkKNzcT^0πU"e91tU(KtVw+:\gR.2H&v=g)(bNm&([:bxgXJrelO,LF7OCV;MIEn5j0rz$WX&rJπU"(Rt9JAqIHc;zIwk\zrCJ#fLFAC/P3YMA^,R9ENAa$7^y,M7<GGW)(Dud4v(D68BπU"6ycQ]9%sv;>V+QG5*_j?\K%P$7[*%Uy&#Oi#a_7=Bdl^\'kBbi#W-Z0SlAx*o2.πU"M.4Z&cz6//:m7x>R0aTP,Zc5Q%P>wOBD9Y\yz=-[wXF\Z3K#+84PlW9B<?Z;9zKπU"\UtrDjD$PRD4Pm?N/B#7K7YGfOeLp(Tj5$Z7'?Ox2lsP);NS97QKC2UgnvrE7K;πU"i2318#o5NHjWR%7VZ9dZtHEq]T7J]9#O5(iCy8Nn'p]qiwC:HQsK+V<]xw1aAKbπU"frfnQ^4$V*;hmHW;2)HYjn>:WYkr3;7mQKhJbSel&bTlVY6g=;4Am4o)25AS#ErπU"G7opEZXIBuIbUU6+yOe<(uJB(>?P)e7_DGu+C^rQW[mnk'?.8]TTbrLt\mPyhILπU"YJ1eeTpNoe?'78i%K#K.)?myl_B9&GjOgo1W,mMEjL#N#8?ShEOI2jrfxq9pK4RπU"ccx5nBC=Y><HKjZ8f\\^.Kj:k-eNA.hV>2O7P2/v\*VNh#/z&Ngk?X7SkYO+K%/πU"SQ<s>*2g1)siKD6j8&po7?cb3J%N%Wy[g_tP#=PD>a?S0T$0/.^dr_NN^HY/w(/πU"6_io9S+L?yhs5R8n>[al9:caZZ:qAs+&Vb&//#St1=U5BOpubu^d)Rn\QI;vCk^πU"L_4[6aPBu;2-VteF^l_GO'El4TcSIxfo7wO[c#,a_+ayI1N:V+Lp)9w5'3F<o6oπU"$OdeYk#G?,6\MR0Av)3.+a/v-[>ZA'f)k:.oYpOi]17cL:PDg1vhzn)zlbTQkXOπU"k(==lRTuhD9L7yD7A%o$t-6HQwRVykC+4e#/EDzaTP&5KXFw6=W=z4Df^Vz*^SuπU"BSfS)lru3(sU-4DQIB=J2*7\grwKVBEKJ2f5?[ZwqoCp'8+UEgrLv0]G1pjOmxKπU"=RlMKsv,nthl9L;&/w+df\vS)&r4Gl;8F=6e\IrRTJvBgTUz%Td#:-OqRR86jfpπU"yeg/$.&]1XV2M#LX6i-L:J^XJimj52,HE$AhF&1ign)n#X9P9uHqf>gL2i7g[waπU"B*uWI3<J,\/X;C3,H^-PVxN1)p[2-%/=YpNG]]]NG'U$[_.Cjtx5)ngK*=8+#3FπU"wu:&AtbZXlior8uC&N%tDJLBNU>jHu&18S>AopHvVot6FvA<\_7G-iMh0>*$=VLπU"p91-[GjiUjdUs(U\ES-3icr[VGPs>XxaP:i4S<&b2P4<>Qxk'R/;v/e'RNDjXMXπU":+q-jk&,c:;i#UG:3H*M&mC;N_U(9eXsrXZ:YTNKS+e7520bmYX)0'q\>*9jUOQπU".CT\TIoYKD[1C&#GqO[k7HKTe&=,UO>,H9q<-UY*_'PRnA24=;,:X0\A5h)uk:7πU"p=<2G[Y?MH+/8)Pw>mBr+/>XhB8/[9MD>0=yEaJL/e6LLY8r1;OdYaNin6L(YX4πU"yoAQisB:XdiNMVA.9LgJ/QHv7a(d%O6_5.dtK<17iOj%'WrBIlrZ[e[+IVEd-QEπU"<();:IsgrQ-W<cHI<#aKU?H]fBC1[bJ(7/s41a%&sT^+(KrW+(OsoL*KYO4AstaπU"Ef68(#=a]ds'aL^3b&7RALMAF^-x4JTfA;x5(*AVrJ+_.><1S?^;8O._9ZEL9oKπU"3k,+R)2N+E,qLO3^s(8]HH53&aY1ltc\J1EIuA9$z9CPmvg:[cSW4<Dao$fcO.(πU"_QpQn1GMe(F-Svb;:QGC^RX<FH^_4iY(t>M/GO95LPxx8z*735u<e3odk'Ng7C9πU"Q(k-D4Kh=]'30],D.T]2Ah4ALsg.j=uHre(Mhn-[=OtVkU#;NLiAYir>CfUE9hmπU"/tPJpI3i4'pY]KAH#cArL4Bli(jBTa85aS6GY5'u>(#$3?9M\<D>\TP_)st=qS)πU"d#=<\)Dy1bj;%md5>Lqmb&DMHfZx+-UqGPSN8HWbp^]#L\>v(SCXpdtD#mK?<,]πU"h-[Y:N3X;S-F\fcORonP,d8./BH_kUdP'ZMWYFvN:#K]6,B;KWjaG-9zY&A.lgLπU"JhyAdHNn%o;=P_WNZoy6LU8+VsJ6-*(zJ]K6_T;**&]FP%da-Rb%7+AktcOQX<\πU"N$^aE_$x?289YKZZ:Ad:Y6kqb.$iU(A/'?Q7#]Zo<%wKM&UFx>BF]kucHL&2Wo5πU"38AI_u=u#?\)u&5mlQ2Hi9aEbW&pH&*zm6NkKx0i^,:CUzg1Nn'0p?'bv>V%65JπU"\)6]^*<5Mp)7eKH]InqtAXSes16cdF]fZdgkr1'4K7-w(Ej1vTIQ[(q>:r'-G19πU"]GTL^[XFAMrZ2QTF[0Fxo>mS3bPFf-aQAZkYTaWa-EEduyd>0\&2<s?Ub9t.FvJπU"PZ2TuZoMuU503i5a.-gV3i\cFJ;$&nxJv<L(hE1&Y1V;>T=I)#PBfL>DEZ'6G#&πU"8=3?d%a\\o7oN80SVDVDW_4ktFk32Wl*+1i)cCBce]bhn2K9a#9t<u^mQs5pfI0πU"=n7F4RKP?mOQzF]ciSDOY8/Dq#wr%H*i>eLXZ,+M=EQFrlU1i*:D%Hh<OV';2'mπU"_,/xus,0lTm^I6OA]8O(Z=2Q2k/*_oF1KoR1Aro7lFdBWVLnx1nOxxi?9p%F=T(πU"X%J\=c(\U/M5)k9MFMvkg>5\[87GJn91SPZuSg5z,[S^8d*gh9i=Gm;>O79R%u2πU"z]4]=#;?G)+t]f.FISrm341j$.Z3F4A%^*>vPdun.y1)Isvfk:#H4NS/:$H1YRIπU"HHteN9gBq[S4%>09/hc2Mms=5;04d%zR*UrD)t].=Q#3nFKN??j)5oTCss6\$m)πU"?Ac$0tN'K]e'r9Kwxe(8Nnsu'2(.hwT<3JHmb)DeerCqGo]iI8,YW/iXK'IO=>fπU"=pY1/S_Y*]+P%bC:&Fi9>^9*_nqHGb&(a'&>TR^5e?,C>q?tW*0LF?^Ic$l[<=qπU"ha'>hekGtNdoUO9bQdbSR#oU)X^a?)#w2<Z8t.RWu(QY(hxnS*Vj9RUsdYF?P%fπU"xDliLstaLrGrU+$d?o^:PM:0n:M/6<K'A[u25hBlQQaL\H$[,+W07K*MQW(sH9aπU"tTU0HdXRkb#6J[e7YsO\8tmSPh;*VUo1vLwmNe-V%O0220Notwc<<]/;7zbLA-XπU"[Ao=>^pb^(?Z\)[g(u(Czy4s4X*osu7N[/2Ybw(FF1KZP&+jVrx/a5_*/VJ5y5SπU"]3TrvNq#2Qe9rp?gasX7PFW4(S(JQz'NKew6[QwI]2rR6X_31:noq.]/0lB?Xs*πU"pYkypGj2<uC[%3h?IWU>uw4Q(s.$mQB;mszk5jO2Hac)-fWN#0$5Y#3Bjaw>R(UπU"_8b5e,''?1Ay2+g22s5#^iA9J=vbpkLN?DdPs)1V&z>s13q]9WMqKk>:[aN3xG(πU"BC.zgI2]:Rle7?V&T:OZm2'duRkhm^BMS#/nG);oHkv#KI:-K+=OU2L:sf\#aT5πU"L9aNV)<\>djY2_:RX-R2*ZNY**5WjW1Z/]S[W+P(EsP'EJNS+n*?nrNxZh=V>DuπU")D:B'fZ8ZIj*ANl5Q>(3WDWFcTT4,;RX&&Q)WJ/pGeFH'5uZ,YMR(i5OU>fk:hvπU"lQHClliMo\<O+x3,dXhMJ*Vr\FP_YeZL..)u8A'W(:4X[Uo>l3OHOOU=Hohgd[&πU"%iw-kzxQFtO:#L>jBa?eM#L&B<PMqN8J/l.YGoR%Js;6dN(=\%G<H.uTjaat7m#πU">X)'?.mO<.4UL3/CjvL1C=2KFK$5ZW[Xl0)6MF3ZJgg734jP;*L);9BzAm=>H5$πU"*3Cgfg<leQR0CnepmeBg#xm\733-=qL4AogHG$gb*=Q_CX]f:*Vg=7Ho3AtU6K$πU"998Ae>G=$Es4W\$up20=eH2:^kTB[PVMTNLOmL(co9YvO/w^(gpj'1_3Wp=<5#vπU"&h]:z>&4^W_6(LHax;iXZQ(1Orhc.U5Nqsa#e.$O,CXc*PjFy4)S4QCZA$Qkd$8πU"T=M4+aXG7o5Ob/#Wj#Q&aX$5)Ao0SYN7^^\mF^Z#:)/s*Hnr5#JUu?f9T?Tav=-πU"=*)V^aiJzVE&<<?x001B_4h*X;#0+Xm/J,DE>XT1g6cj(O'0Z]^c#;-rYSrbIV3πU"%kyc1WHOnscNnMu;ul.MGI9Yi9Bg3umgRS)R2hhbbix_n2]D.(PSAV9[Cv^R6ZHπU"dLt3sszLHdnyB[Pn\5+KqP6ZbH(kdm:lZfQgH6Kp.^Dd$0j0zs5$gBcE74XG;v)πU"]N-G#Log]DIE4cRJyQrJkW31NgjN;d.arI,r%4;S=JE-,r7gX,7dkv),^)3EOLfπU"l8_l;D3eQsv$ah*K:K>/jj3W/J(gZsLl%2dw;hI_lC-T_C&<SrI_/_M;fFv%1iuπU"%,a.,x1mz*>O-/1*tGtrdd.^vdQPP,dd5\rDOp^6*[j>?-rs1SM8#R;cSEgoKt4πU"t0bn51Z>D\dPD'5wGsAt.D$fbKpW.Gr48ZM$.yDd<OypwV>M\'zKgub=nQnk($AπU"U2ipP-N^m,(-eZU0PudLXpDP$qEAWN.%yX-_sdn3:%PD$NQ?Vv&JV,?7e]0=e>4πU"\FSlT4[d=2*SG-D#iU8Jh(7]I#9X0#Fr,?afwKR2:>:jr(&AxkvVM.MUrGPJ8-mπU"BSgmXm=T*Q<Wvk/\]Q\P*<evHi=jaIkI)oQi)Tqu^Ki<Boy9+*8H/2$6ZGG)v&BπU"hil]F(QO4^I%zEx/jWV;pnlH^%PaBLK>G9Z#=g/U#re^&PBGX29q2D7'<rRPY7,πU"LtPS0hRHF;C50EZkxW3$7+KYrMM+JKJ*eOQ5bVAhVA8+;*JV7'w4iSrM<ib,TLoπU"hcG5=M[d0v?Q?k7\TDMVP1j7So9Nnr%z^,gn,Qa]J$#IeM9FB&/bv\%b>P-iHV_πU"-wuHhA4nCDdTSI4)BOGdvILQe>llaZPI4\o-vSXxg1-kp#]l65SjNhr:zkt&AhSπU"^d<VcLXliZgm[ASCS<CpRP3^urP([T3xe7^148UT9(D0?3.q>(y3.[K-yu[q5X$πU"^N&LB0D-M.<9UMwQT0FDJnz,GL#<pOY=ZC?JVe-H?(#eXOnRG>Vu,Q$V_Z:+T9[πU";H3-=2CM:x.j6cc,<x/;jor8.r$vfZOq)VDcVuERYJ0[I?sel9P7OX.LNiMpU&sπU"/_;ZMaH7PV[#$u+n/;HimiY%iqu/UtuNPl;OWGT)#mA)SLmH>lo31'Y(aWbIo-tπU"Zk81W2Ar:VLd-lJZ+PtUW:iCX#-NZ8?Ekl#%.0pi_0V*xS5ib5U<h6j=%SE/0%rπU"/Ss4^g,vM7TrK1$+C>ZORd),LRPDMp:R('RW9:u:p[\<-sYKNJ1>KY5jE7Zn4>LπU"5^O5U2ck6IbJR-of>Pq1^12r4Y2dJ^/2(]\\21;Cm(5iwgQV\l&$9av>I-KzsRHπU"v=C,vgy?OSV2j]feikT))FW$B5Z&Q(Hx>TLAC4BTYFfrG-3*Kn'lN2#$[-X+_.dπU"W4UCAsRh'^ju[p7RJ.,A2dbj>:pd*YFXgo1SF?*9/q,q=2#B*>je;xD/F^<^4rjπU"y[]*mm5m8F.dIT1g6Gc%B'dD0Ien^1I'Ms6Cip\&\Na8;k15&qZZ7$r_>(PAR1&πU"DRk[X9;m&'XiJhpZJO9N$AX_b&SsL:iFSmC0i1]eEPLP*-J>pSWH(P^Zx.f:oA:πU"dfC0,CaW]:]kGhx6(11O5)$52L'Mu/'omd'Nt<;oc2otHM'NDz9;-5CdIQjXraPπU"?S>4JWBvg?U*gXOD&2#Ap#p?)iM[sh4>#P#N(o9m&K)2&Z8a\nl>Y1D:ik[*_l=πU"q=uOFfarwm7Oy<10,edu^rAvle2^m>UzzuRA+WMa%QsrW;IzT$m44CEML2&w,15πU"o<?)S]*<];DD]D:Ss</];gNA9-.Z*W>TsAF0EfmMf*6=^0Ie8U,W8Xc1?u<#jn[πU"-Sl8J^S>;_q-ns10g>U_g,9+)Y'GSl>>ISq_U^bUxH*9)P6#gYeu6ObxV;XIxVgπU"k>njN-R]\P.uZD>Nh\+#XDnMA$c^T1#4gE^H;GFj,FC+8O>bLXkg'&0A.UyjX;_πU"+PyMD\zFk\gd'K_#)X[44aP0a_#a3[]pd73,^*\*f;*$^A0j)9\SOr*uS.Fu*,2πU"+j152Fr:Ou'F06BnH';[AfCAFIOdIlEcyMV_h=w%Q'cz=oP/>)_hh6pIlr^q>e]πU"KIBFmwzK:zGaR]9r48K*i8iey7,;D>Q;rW^#$6ioz]srrd(gK=<&Fi[]KtoK\n;πU"b&nDPl4hk7sSG5Z=i/XgHHq$JOJ*C*.Agb<q&\OW\NJ:23IV,ew'AsA'1=NbK'0πU"T4SUFFNh_Az/_ZmLdTRQ,?j^q?hcJ+w=J3,4oPTS17#E]J>#B.GowLxx1gr=7YfπU"-xc\=AfsoH<x)J_zNJ<(sse&X?Y.7nnjf=Lq8u%p()9%%%%-%%58FCACJu&-e)%πU"(%_3%%%0%%%%izs%ljts%SifyTfzT=BT]5L14_N5]qq9O<Ff#]HR-fa3?OI&3o\πU"$>2Z:)9mI^Ro-dp1n3>A<^$95<QYV&ZsZ^UGk&hX2^TtIC4Q<qWVQq[BMg;#e&sπU"zBU83BAM;DBEJ%(P(XCcZZhSI^Lc0',FhWT[vpk2AExrJ*UmEq(ql,1V6FwK-*HπU"^u4pqut;;R6_'xa1J&rrt.4/Hq2xuwE;T%^OlA-Ggr%$,G=]4q8n>85e^uTHC5gπU"\L[7GdxoEfyJ-;v,j)Q(M>TouR\Z/wXsU5ob:R4[/A*'I-1hhV;;lYprD<LRRT8πU"AdN$:u]&YYX$A>B7oEI3(&S&Yh3TxT^EJVn\a=j6_&_E\T+5=Ng9E7?AG,4(gSWπU"labdLNWZ:9.y<^rI?Yu=ZjKRf]IuM^.R7^iW&VS3&GDIA^bFB?-sKU>YBC52ek6πU"eq\erF+M:96uS>3vu_2T%Q-7,t0K$A:)P'Qr5,r,ZQ4>ouxMQk0.,=>M;W)Xk']πU"b[Q#>E<.or6;224EaVex#Ce?v>=qV:F]\)kIXXX_:%r$\n*vU'mC1ASmh48Fs/DπU"g3&sN0_JD7iq9A4VJgia9*_^*B'Jh92J)=;Y-3O4_v3A%Q\jMYO'tf9YAoIpR-gπU"ZNE6'IFa#G4ghVT'DO.+3%OM\Sjl^Z01YppQl.y3Ml>*5g:Db(/N)./a1Rni[(JπU"2J..Lk#Gst63]f;h/4gt7CIZR&9O._01bN*t?E%h:*i/e)/l-G8S/4p,[gwidUJπU"q54:4[OTOnTxhB*_uR'/Fxk1>>-W[NCcy8u&a&t<1BxK;94/r>/T/FW9ALI2G2qπU"+XX_eZ<R)cnW%ZfAt84nqjU1hh'/wi/j.ppG1v][.mrV>(abJ^nJMyQ3:dpVlZ+πU"QtpqJ8:1>P]&d&'.5jk2uol_%gZ*pf97'6^K=<8x,ngpsTR&;9i9ag*&ClMgbE5πU"Wc+OMI>xsY,86Kb12Jx<M18-;.0;)'.Dgrj<>kaThyye&-CV^p1vH9\t]kn.ZdgπU"9F9nxM3Z]=+i]K_FF;l).jInL1=eCp,Lszq%C%d)780;>^HR/&A*]IJo:WUP1yWπU">Yo3\5:7J*oPy?R_Z<8]T#STkk2Rj?T,K=*-yVIJj>_6#C-EN#R0hz*SPs-^#UsπU"V+^A.:4&]Vw=+PCO0PBc$8S5Jy:&?9)obJ*xLN[7JrRQG-UZb7^,MAU_lkjU<QhπU"bWr=Vx:?*(x+MF^:z&.LAyVuS(J<<[itZ=Ge544$xtku8pi)sk(2v.?LY4c9f#XπU"?:NYaBw6h?ueHxWu#6xwZq;\zTWPSnmwdgAjwnEgA\yL9(1s?QSMWN$s+X,cp(aπU"Vt3TjzcOm[PHW8^:WN:jC?k*XO4?Pcts?aW&^VU9YYrfDw??su4Z#+M>[:=o]T%πU"up()%9%%%%-%58IFA#V'F#P&7%%L&%%%1%%%%iz%slmn%lmSiIfy<^<:=;UR5ihπU"dfs4]H#cI3P/?IQg%vp6v2TIC8Df;V-n3L-v3tI\yV#w-v;lH4X'5wC6'2Mivq]πU"A:pRT#/kIbT'aXIuw]?PYQ3uX:+7lL%AcGq2=X]5mx:Vnobq1nlc[SCIH3X6oa)πU"JUD;#R&hsKj]4WBL.0Bv^37nQ=Ni6&%#Zn?FF%cRDRm1>YRhYG:y+]g_5h95OkPπU"7vgBx:-'Sl[oO#)nYZoNIV*-yJOaPLwi(RQlp2V^iAjPfi:%5AA^gbM?3c6f7o8πU"AavHrpy8wb[VONnS']BhW,Q+1V=TrAWOjeZC*Y^]?1CIqU]jkiICm&lMY)k+qDqπU")>ohj9qQG/6:[M.PIYd;\/iqt1a6cT)eVU;oW&>8cYAkHT&.up(%)9%%%%-%5%8πU"FA1]jpdL#%%%W%&%%1%%%%i%zslm%nlmSdsj&&k]4=<[U1jp+'v,go,+8S9GrecπEND SUBπSUB V2πU"[u,M[0&#<6%[&jW[=$ewW7q_]4:0BS*>:+;4]#$(8;0:f9ik?[*/MO/2:Im;llqπU"/SMLd[zs<>&Y1ARYX<kDlAW+zMDa\oU%jQ58Y;R3SbV,\&<;(:YrWAxbrR]]YcIπU"cw&yDJ61HK&lFVWPO?%m[\rEEqVkA#io#toXpC#DZy8U[>jrvN%5F]Q<%5W(GF]πU"SUMmL958lx8EGc010+oj)E8qDruHn3DK3J-sUV_WnF1Ydw'GTup%()9%%%%-%%5πU"8FA]rh?A&T%%%&*&%%%0%%%%zsmt1q(MV#StjD\_V3;[U1jpao6(cTu,T#HS_+WπU"8lH)FL_BJ;N08Ro]so9xh6L*B1*h_:eY6QZcw3SH?p^/a[+MXQ[q&fsb=c$(HxAπU"&p$=#hf-^S%l*;y)cDO)VjUzqBU^A/Z_Q18q75f?s8/_PoB0s?tk,tACV9.28vlπU"K'*<?;k^[,AkLD%up()%9%%%%-%58dFAo<5WIa%.%%9&%%%0%%%%uz%ynxn&MVSπU"x(lLup%/gV19U0Wf*WI;n>Nhn)k=6QYK_RC0?fr*r#xGMa;cUGq)57om6MT4id]πU"QfslSDM(N^CM-4D0);9q=Z6m?sY\h0d5X13M%,dmP2G&0%Q4_bjq*hL7wr7V24sπU"P^)\R5x9u%22l?,r+=\_%og.;?D%Q9S-kPG_-=nwDlfQ>__cf%qlyrH,n5&u%p(πU")9%%%%-(%d1$^E/K*(Uj%%+%A%%%%/%%%%wjf%irjS^y'y\'^wuu8?NFp=tFHx#πU"MtQ%7MMCtmToEF%rrvmnyyiC]HpQBamExioATAGoEPGH?L\^'-djmz.m+YLAtO9πU"t.KK6%2df4KLOc3sUOG_dSs;^tAeMIe\'f:4fsK5_&'NeeF+=MVZ[U=qqakE5J;πU"bo1u)+iiD?gGo3+aa'pPLvk*kAb95dsDua(m8l,ZnWoDABee%%%up%&'9%%9%%%πU"%-%58IFA3+4kg\%.%%:&%%%+%%%%%%%%%&%%E%%%%%%%%%gfxt%ttup%&'9%%9%πU"%%%-%58RFAiW.NwP%.%%+&%%%)%%%%%%%%%&%%E%%%'*%%%%gthf%up&'%9%9%%πU"%%-%%58FAN5vCR&P%%%&)&%%%*%%%%%%%%%&%E%%%%y&%%%ot%sjxu%p&'9%%9%πU"%%%-%5[8FAw#DUzI#%%%%%&%%)%%%%%%%%%&%%E%%+%q&%%%ozf%sup&%'9%9%%πU"%%-%%58FjAg;5(pU%%(%5&%%%+%%%%%%%%%&%E#%%%c%'%%x%frfj%qup&%'9%9πU"%%%%-%%58F%A#'e(=Q%%(%&&%%%+%%%%%%%%%&%E%%%%c%(%%y%fjqt%sup&%'9πU"%9%%%%-%%58FaAES0*v%B%4%d>%%%0%%%%%%%%%&%E[%%%]%(%%i%zslj%tsSg%πU"fxup%&'9%%9%%%%-%58.FACJ)u-e).%%_3%%%0%%%%%%%%%&%%E%%%&2F%%%izsπU"l%jtsS%ifyu%p&'9%%9%%%%-%5#8FA#,VF#P[&%%L%&%%1%%%%%%%%%&%%E%%+%πU"EJ%%%izs%lmnl%mSif%yup&%'9%9%%%%-%%58F7A1jp+dL%%(%W&%%%1%%%%%%%πU"%%&%E%%%%F%L%%i%zslm%nlmS.sj&u%p&'9%%9%%%%-%5[8FArRh?AT#%%%*%&%πU"%0%%%%%%%%%&%%E%%%%CM%%%zsmItq(M%VStj%up&'%9%9%%%%-%%58FAko<WI&πU"a%%%&9&%%%0%%%%%%%%%&%E%7%%EM%%%uz%ynxn&MVSx%lup&%'9%9%%%%-(%d1πU"$^E/K*(Uj%%+%A%%%%/%%%%%%%%%&%E#%%%V%N%%w%jfir#jSy'%yup*%+%%%%%πU"2%2+%<'%%%oO%%%%%πEND SUBπV2πCLOSE:IF S=1AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπJonathan Hopkinson             SPACE DUEL                     www.smartlink.net              01-01-94 (02:24)       QB, QBasic, PDS        185  12281    SPCDUEL.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SPACDUEL.ZIP",4^6:Z&=8950:?STRING$(50,177);πU"%up()%9%%%%-%68dFA&k1pLo>R%%>?%%%1%%%%xu%fhiz%jqSg7fxfb*RA#^kahπU"YY^do^WO=KqIJW_G7V;D14?SO'QB2J^IAIC[u:ie=/]l?;Nu-_d05O=$.SoMCL=πU"a&eu%zFtI/O)_]NmECIlw_9=o'dxAFKrQJY3&>F-f?&sk.&Z>sKT)OuPNk4g3JcπU"8l#D(nhJbNV?5iI<=4nQCllepE_(zo6Fc6?\pS'8<j_%*ve>AK3X_410cFNQHLOπU"k<%D;i9\sp-LlrdY$R7l[WqTP4^u9>,foJ3^,g30dMPunT-Q'US<4StfR%A>B[7πU"g(z1j>q>L/:w[NxauC<vDkZL//>*EypJ=#c;(y$o=bPc^OxHxG('#^Rt%5Nh>%BπU"[ZZ+(*Lar=PYKHXpPXu.<%6,e$0g]/YHCmN?;3w.dU;P,6l]abkhqXMH8r'5D+SπU"'S1f)q7#,)fnk<r%('+Hj]FnVLN8-sZR4DgPEEjHbl2JtBFw;m#,ijO<W0('\eeπU"XNoi#E,BBOK#=1?5j:XZJpd=o92]mTB#d0$pWQv$f0PHhBYk$XkV4;]Ltd<>ir-πU"Yre9tn/.BamisS'e2GRvV'mh2Gci3AE7mBa0j.4%67U4>-f1PiD]ke1c*>e60K/πU"bo#;QY;PigW:23npNu>v6G[iSl0l;jI-R5$cFl<&nc0w>qqS0Rf+QBr6ga=mIR\πU"/_Y8sEa3ht;^F2NR9[UwX-uTD-PuD-LDZ-HDW-DDyK&=ZdjCjg/^qgDQ&>%r/hEπU".M$Ic#g;dW^;?)3,4VrqZE>gQe[uDtDj/>HTeJ:.r0Ey*^lBWiW=&8n6p^&Ld,^πU"=8'PbU]Zn^s'_bm]ad4=B8Sftm(aUsWe^El#L=_E'^wt4>8RKlc)s&t/Umzmm5eπU"T0d?7L)&*9Ukl;b+Z'^TqPhDQ?CP'm&+m]j'G^R4U,=%*6tvBDG)_C9+G/1N+q'πU"F.BI^m:Xr;(.wT1\GI$1mFv&([QNE+e2G)pJc/L:I#MwpDO0&$KK\U=JX=azdw9πU"LOZI^=J4sRY)KAk.6Q<>fYbAECk>_cce&slWznhJj92,hyq\l+WCXzj8f<[zP/1πU"^ywG0VZBw;v2AtCDLpL<twk3azVJb(gb9>W5.(5<HQ&zFiG81/u&sM%3(z,)U=BπU"=G7t2<#B%SL<YY8JiLP&-nuJ?1(Ataxe/V$Q6N.]8D'd7xi;a\Ah8$+PIWcCp1gπU"V'zGRQza]d/mnCtdGx9KHN%<N/soDFbcSBu3zE+xUQ,*3GMIV%_QR5s/,]45V-bπU"lrCw7Rr,9:EYfh&Xnbso(mPG)>y&_vEIDlm'h[cQDUqqpdI8cEYVC_L[1m%8-$YπU"L/?8$[PB$RO'*csp46F.*ttWlec,1[Svf)Kg39S*Pk%%A#[6neiM]hrEYD[ae\:πU"pcKG0tb+<#7z<Ij=I&wQ2$vBn<<b4[-P%n&dR.vA.8NWBkI(4^jagq-cGO&r#TLπU":n6JCliok9UU,b[3fVBIb4AN='&Wy$Js%ZDs(Ovh<dea%H0po85K=:W73?Vwe/LπU"mQ#8#4NZgvAy(Iqu5IfIV_]dy:io.D=.'I70w<l5*95me>RCOc9r]Cm4XTGQ=R(πU"&vpn)>oS1QBY-N\0vySB;D.T^$KrC0f8CqS:9H&OSE&*97.VMp*\a)*+na04.hlπU"(6>GlQx)rz_G1Zirel^SG[7U9nh(4vw'*a(%VScmapq=hCj#_og6,JfYmQRLdHfπU"avi/msfSPJiCe'dDe,^UFW5pEc1,i^3^ss^f5beg>;h>lCV_[T^.guCMn-F''6CπU"%NB0:fC1X7d53ljE(DYEb*#TxG\?+bV\<7WiN)Xm9qCF-Csi.C?sf2BOPjNIHGNπU"U]/q[,62qGJrjEenHEPBo#C=JLm)B)PLOdW.V;#W^bzm7J#c5x$h3RCiOyRiBNbπU"m*OeQk0F:oPX60vn;y:Xu+HNlf5n_>0Qoq\jtPH/oBLeorjgvpMA$<uNRQL'H'7πU"9Z,A2%OLVfS#[R?P\GCWjrI02WU/gGE%eeIpRkW^G)sw)BTNebW3?7H_^7zD_mCπU"Bey'^vTzEJe#Ed;^fdnO>9[3M=j#jHvmE2e^62Rm0^Dv,nJTT=I:R$:m9kKc4rUπU"3G/hT>^S4Eg'77tv(G[WR3gv4J%^TNw*%_k<&>JeGLlqa'_Y2wKOi$]K1Y>ePC;πU"DFVFsOE&T;1FZIoj5NAMS;t/Ibf&PZctx0.xP3EoYj+&9M&q'On8)e$NrlEd$q]πU")ouz^/x=go);q3>-N7xfL3T9xg3pWQ5R=_&>4Z19(ksgP79Fg?PS=S+.9/SUC%*πU"ik$&8rLm8KO^.;[?)uof)_PV^eL+9O5:gR.f%l>RAF>q/)<7tyak/?XtPFdQ.ZlπU"Q^dsYG>9a\[LtAd8JaxbiH=rlr1+]\^Qy3I6YRZ?^(>=Vf?nb,E4Cj7':6w5NmDπU"z6]dKV0GLUG'c+mwJ7j#j\lR[rDImtY);2iJ(FaCY]HioBKP#y&RdiKfsyF-F1cπU"54JVUai=_W5EBGi6[JtnF+(G^ea.HU$0hqnV>%Jg<jKo[vBjSLjox1=N0>G'4gYπU"Wp7jaM4d_E64#;KbZbZ\9#u6iLrE)Gc]I.tP);wm(UE-87g=P8IK30nR5KnS&xhπU"MRS=NLIEC-Eb>W+$v6CH'Yggh%TR'HN&S\i.25^DVZ&*nTLJH*,lPwT6FU'f^a.πU"O(a/CT.ccH,#uRp5B=_^hhtQD5iTy/.:3R94//RJ5XEj3,;%V<LDBYojO(Q+dK+πU"UgYiR$>/u(JVb=1x<idd5ls67j6/H4=oY7f][7&<Z_fnuc:<0GLI>VzmsMcL^,KπU"nuvL\,>^c*Glh;=--qSYA10GsAhY(5aUSM158_Jpn:]$:#yrk0\;j*P\Q#keV6>πU"YqUA)=x_,$9ohL5_j-fP(j*ZvbecoR=vISi2IJcjX):3Vkc8h_3d+wTucS^>orTπU"N(m6$6uuqblFNaYL&'vYRb?OXF%KB'ILJNNe/lhl\MBI[h7du4BJR?ZM8J_G8*RπU"QE4,Ai;^88qPo5S4G;+)6ZT=(nMH]R0T47-ddj<\*$]&XB'G9G<?&*OzJa\H?)OπU"5i7(:-P?cw:/tB)il4-Wcu-I<wtzJF$RPF/#AopxeIE?=P1XtRe.X)S&J/8bO\.πU"q$MX^bJ(Loo/5C)^M+lRR0XkbxX,+fe69?e$)l_?4eE#c[HRN,a<uFjBsf$dDcWπU"u)O\X:;<b/=70,\-VRHC?3H,T<2hF=&c*kV/<tMJAqF>y&2aN#pe4H$*R5a:K6]πU"85lAV?=kL5k(I)PXB:Pt,OLhdS1b#HiW_e:[F3PAm)Rcgc75*?0jj;a(LgsTW2tπU"eL^<P;;5H*o:S_4g/-SZ$%;fa;U9lNuJnNj9_nAokvu&*8)f<Eo)q9$.\G)mv^VπU"-a%U+1FqD(8RJodzT-V?Z+y['JtE&#LAQjf8$dQ3s_Z&))oWN_k6*A10%kXlq$'πU"EgBBbRMQ38-gZ+QSk.)OZ\4T1W9d[,Q2)3mOElGZ=UnI3?#r2oYAHAA4qVn4osOπU"(wYi\2wOZrRr(&Hk;0lR_yzlF.=90uoMi6Key=N2M.6z8:VukG68r_G2[?20I4HπU"2W5HA_l>T='Dl_l;fI1(b'gHx9&mO3^MOvxj^>ziYxO-2p_?QE1;cp>Gp6$$XC3πU"\IC5DO8sZ5K_UQ,orgA<#rd&.B>xv'#P.t+b;c5msKe$pa*bA13lqn]K\CbR%mlπU"(Z7Bdwp,Ys&[,>OA*Z$xQ#7I=nXs,>LGg,/?O-%V1p[0P?%4_xc+N[lD/sH1<pcπU".'+3.DwG.0(do2E-c#,n0/P-VqZ+af(iW4AZ,0^c._[E\P*MOMgv]EJI;I33CdoπU"R806-D42l=U4xn8u2NN$<eldsIv4dU/L2=g9=M&q\;76J0M1E%a.x(Q6;r'/48bπU"p9H,V)$UL1vS)SppU'VrEQmq.?4:.SJNOf2jo6$^0:+IIc_CjRb7fw.;kFg6OD;πU"5AjvBwTI)2-^eGc-+C&>VI?9,<5Qj)+oA8nLi(S+O?i]itj[s*+fSWo;Sp9<?1>πU"c4Jr9]t[pYIWW(jJPy5myBok.t(e<rV+jRhR4>Ui-Ps6J'jq=/vN1XroM8&fD(0πU"1Tl(w]O#$JKPBi>Y)q.5w_:CzYx7qD(hh;lD&&:a^cOOVCKn&5CK6NYWQh\V?QrπU"/j6dzu1Eus%T+x;%hy2,bZ69tO<*L7Iz<ItPoPV1[HLu7P-I3_%[C0:jE6UWFb9πU"'i%8w<4C^<3sK'Z\&QAbRk%#n<w9.T^u$7/NJC$7#d]Mkl%jJoKOc-U_]>/<&hFπU"3/vYl54mCN78o90QxDz/6;mlfn3)P]M&Z,2)]ab\9>Wl^%Yx9B6W?iHc=3R$N8-πU"',Dg\wOXkF9[)k#OEGC\G7?$Wa$'A'G..]f()'Qu78S7cW':=81aVBEYp1R,B_3πU"jxqa)<LrWETX1cq&=wNbxAGeycm^-RSh^T=M>1Beo^qq)71uOAC(sLUlkM$I(QwπU"C_3_SAOxt'a/5(L;.N+/^jo)ZnxVw;DQAIwJv*HB29._O[oJ.P4SuTJ\dm7$))cπU"\z0pjX_>p]YnXaw;Ai?']*nldvp7)ffwta)49;.'K'mn?Y97CJPC0?6WH5DQbE<πU"[Ith^rNgPVro'5\lV5w0iy;ACe<dM4gD)5$/&2Cj.\$OlaR5q4rC0(ENoE:HNd;πU"yOt;E\O(\#]\dE^C#$v00A1Ze]q+-*'rqO7^4:bnU*#/Q)B#cyS%5GH3DbHKHQIπU"AXY,Te:Zo%.cN0=1n>4W%Xm'O)1rl5I^n+EdAHHlmv=r*dAg4*QYGOK13VAY'1IπU"R;52:J7C8+1liG0M29%yC,zAv)AbA*K;Yx,DrM4H)=q1g,oqrJtX?%uSTL)rm]mπU";48CQ9,23X*Ws0SgvTA=Ywp:B.*'BAnx)'5F'#>%TTad:DeOMoltoXG9FU%(-zoπU"Hem&X>irV4Xic%UMl'ELO5[AXA'F-MzwZXKGX/pNSTFk6DRqHP,EgS>E>)#R9<7πU"\361XwCfkpc(,Uqq#=Us'*Kdk7EAR%A(i_,;SH]i$_2Qaeot=+.ApHp\bRB_TicπU"[Vo9;b#=2d/avJ_TjK+PLp&Uv&mQXBO3tgN<LS:61g3H(a#GmjZ5[b>Y:PTio7PπU"M&qHpbQIS,$<IA0'\38$%Y2a?,W<9A.\9ZF>a7;/I,de.t^iN\%;Q<l%P[?f\M4πU"]g,,=9p=Yu=iEDl=R;SKkEdb*H\#f+/AocfYi8].$8t_OZ&F4KoKTof6IMU)\B7πU"'77RX/&V)J?AY.)/SI9/lUlxI/71>Tr;:2CBm3XJ_=9([IQheVs^MqTn4e=Q2opπU"9ldTVJBrL+jLH[rC(;v?,YF>vCVB[Pg0&>/:3GTP*\/63:)1j\fOlOt2&jPflJ\πU"GGuh5Rns*j\7k(.C'SM.0Y..Sd.V6J8Gi#6JWqVKy412l:vcP.wiZ(vUDA,y)GbπU"qzwW2bM(MM=$$X_OsJ8jkVnq[_bU[^dNRptWI9[#,D2R[i\x1J\zD8SEWLp%0vPπU"e4mP4$XacGQ83TGGIJ?'G:%v(bi#7e6h'kUm)+i)/XCGP9P4;MZiS2)O332,S>JπU"M2pIG'x.07*jx0Y2[Kp((<pU$QrasVJe#?HXkmnUQ^WM<^$ezsCjw^jfobPSe,RπU"gH7,a-]gO4+R,3iNsEtRlcRCS?ABSlkZK%#i7/?^P:W5^U+yu_hIS%I#LA\LC$:πU"^M]Pp/h&.'5)uJYVP]sKQsZ[Mnb#/bo)RcoM9*p/9sfMh(j=QfTBB?qEUantOFiπU"eX=jf)hndNa\8vD^dv'f2*FQOnYkxT1yKyg^AUP=X.\BB5cub?XHOoH>\j2>Hs,πU"?3gr]9cZj0$8[l=gn^Mo%0WRWSA4uoW7XDnG'%Gur&H&sBsV4GGW%+/E\W+A2$pπU"#(2u+#^_X%v717QL^e*O.2'tjYL3P/JGw#.mE[_*-gv-u:ck4;7O<4^t:5vR&?YπU"oc>L?=)NO+]?Mj-+j.NOk2M\9u*<SKQKmPP990%HH--q&H7NVgaEo5_-mb;JnbaπU"'.BWm<7Q..A^)[(e0s]3nvwJrg<hg+C3Sq?jv(,YNzm387sl>ZmaG$bl[P:d,.IπU"'\hn/+[0viVXH;)<Gu%o>8*#,lHECwiYHs\e[_R[EpprS;KxiGj?99t0b4]dfEAπU"%%qrb1:jeq'u&8WuX&^)+xN2S^Fo$CbRB,ctRIL$0y7-vb2*4CmS(-kjnq'jG_rπU"RLgG>x9,<mJbYKm]]HC)KLq\Nht,H*_GubE'>kn]Qv/oZ27u+$J4BoMLcalM6&rπU"^Yqu^D/Q7uH*U\(F=7Q\BT<lc'dY%=dO%neepV9LP7AW2r3':oO_);_;+V=,NfUπU"YV*L2/Z;9Y3duICUtk=L1p9HQN,Ta#G8;O>G[j_UEM0FRb;DIMtu^C$;G^1fpbbπU"&1fu;&bz6Q\lGI6i(0u/P61d;>[tAdiA-+TsPvVF.:6Bj;NW2q)jO;)3.E^W3TpπU"pvfFzz7;5r'Mh9*Eg1r\<TD7Q-H0TO(h_7,.-<c-Sv9>k%ZZB_/#L_j=tc4o[C/πU"Q8vsGY#YZN$>M0rFHB_E0;8t:Njn7c/]Q4=:x?89jT88Qxuc5]<+VcAK(x0b(RTπU"'39d%>:f?.Fje;-r?]I<9\Z*_hhOM5D%7BqeOd)F7:Hu*)dis\JDEX3OMwf),TrπU"C3IgO8,64qexP%_km(>Cn?<rceOeb5,(N+em+'qIS[]'olVU86&d0^[BX/=lJgQπU"$V,*5r<=7fR'j&BkTfRJGFN84b%wA,ikO(JG$DBD?)O%$Y9ZGY$1zSwp35^SE%MπU"0yH(J)oO;V6IMB,?[&(XC:ghvk'7Ih[BA(p[bte5<gu5N]UV*86zS,r/bC5^L(OπU"zWbvXX2lG>aN^b8H_LZJ^L(43WbvXs&TNb[*G,4X_P9Sh.\>h%_q26\ER#gn-]UπU"6kC1Jj.5r:?g,G,eWQgn((P0Q92f9o&bhZKcITqe3#wb$LOA-(i]g>xKS#<hH],πU">IN)*gxX[Yl(WE#QG&)_vru+Wh$8+eoPAazIh1.Hxp%pa,'jZ-\A[;wF$g7%)$8πU"dzgQF\XSD6aM00rm:jwH=s]P9irzVueyCH4=8RJ^rXXea$u>4rnDb$BLs3VBTO1πU"Extn/1(fI3Ztk(V0jKVkK%]j]_ts*8<[VMdS0-je^;DnG<N;'n;rgq:v439gMHeπU"<AW>:j>t;\&#LJK/,]F,oIbSQcE>)K,fTvl_[sHaP3,<XAjvhYs#UkT=?Il(M?9πU"-;'X^1_fl_=<tb#sSlFcJQesile+q?rSxX3CU\_Yv+3s1bSMhYF4:[us-PKBnDQπU"j_aZKl1#;Desa2_&LIMe=gYR^e]L%ucdzg5>fTGT#tdK>dKMAyUGnV.9rTKChdLπU"*lnctmzGU$HR0aRGT;zxQIv/aexOeQq6yC^>,*GbhMy+a8=ZBtm:qcjSZy:[d;8πU"El6)o[>Yx;rfB#XwT-l+n[2.VEtSqM.<HR4<W>k,uqHh&uj+AijjUXADO2V8QY(πU"U&][04-pP&ex1X$+RTppt)-6r6n*E[</hCEvL5TtSiA&8Aboc%)AKv9tnFr#JU0πU"9?dfg]anFIeJtJor+k>n/C:KSj&5J8VC5H.2WL;8&u7F+(0I4DOmU/gY;vJhjrLπU"SFplFLVnU_.I*O7b]CLSFs&p'7n,1e#v1&T211A,XhY^EAA4m-uoF+h^LH=$m[EπU"\eU[>R#+js,t,[RpyCfZR.pM=q3lk3Ro.d,G$BpIH+/$o5UtPY=,.aieA(b_gWWπU"2lO',6#%Xu-40^j]wc.7-PM85of4w3%Lm<CK#o>f3QU&Q.?EftsIr$D_XToIezfπU"gr1(Kmj_=g)1bHE^dRP(0cIqIY;L*Ab(/,$D3)7%K\tWDkD.tBPsW3&,.K<n*GGπU"0d'MSt\;2-#%nYD*bIJ-=Qq*l-lPRx;6*cnEkhx>HP?1XKeq4J<Yw'VDqNS_kolπU"2s<ISd.lWV[a.&p.\/>ZqUdmU(>%Ehg_pXSB2hUiCs&dr,ug9*6v&UU8Kz1NG35πU"/c9>k9Y1ZwGJ0/$tq'7DZ0kCecK:u4K^xJtI3F%,n%VDRinGl$8Z%2?-Iv9ESVPπU"=i,?NT4QUu8Fsc'ZQ^t\nj;L-s2B&z,Im180E<E8fwkIJfs0;'CVAQ1:4'aW(1[πU"h\YfW7fI,jGRD.&c8:3A,r:7:NPT*NBp'DaaJ0vS_XSJeBhVptQuA2VECb>n?X0πU"7DK(2=l^.sgknARYQ33oJFXFtfEdT?PU/Me_aRQ.9h$3RQI]59%.qZ>^<A5P\;>πU"=GsR#,$f2v>=k+Wu<Z[3sTHXT(=ZisbG[S)%JbbNBD8m<dF8R\31ca0Nz]gj4TtπU"tQIXl2bNot$wLcv6#u[+bAF:-&_]:[(IQW:/X/qondIjX=(+ED^(Cjv[;nyI'x&πU"up%()9%%%%-%%68FAQ-sSP'7&%%%p(%%%1%%%%xufh%izjq%SifyD,bf:BUU5T<πU"hPu,u\l1APe^;^k<0TKIK)Epnt\*NT?'(4aI2Jr$nl\kW/pA:u<5J5n>kSs+U'^πU"t9g9f^-PMNju&[HfFrvVljg]gZ;g%MHooF'BE4'xZ'E$j$Xi8RgXk8iEH]+i<GZπU"qF.#*2fY[45COcL]QCs=c=*?^a$U\r)CoTd]kXTV5ehB9U-8tsFR>t4-BNhC6o6πU"\4_;WcFR\pC[6&3sXWI+8;/[wrfrx^5a9bV9;X)[DVhpxH+I]^jH#?*st,DwIy0πU"nq,u8wG$?_1XCeI(R+DHV-jMP=Is)#og&[wF/[M,#ataw8$A$PNmUZD5*PK7NH-πU"X-kk[)DH6LD<KA?230n\i)i*shF(o9^?U;quAufN$9bGREB(e+YB&bK'xA&s6\aπU"R^pRgM-J7)NGw/6CMG87J>n[3-)SeX,kv?&h3C_yhk]G-C?vbC:p'j:onAoN<m_πU"rwe60la(j#q,GR9)G%eVVS[S2)7rQKfEVMy2WZ't>UMc.J0%#Y5WR-uF5w%h$?eπU"(HLasp[,e8&cCHWJ*;7?obl$KBlPHo+3ql9sLrVW'u&up%()9%%%%-%%68FACF+πU"%,'<&%%%P3%%%1%%%%xufh%izjq%SlwuEf%p]]ce1Upd8g9m*G.xlglneFJ/FpMπU"8_5P.WX1x7/s0d?^+<j:S.xS*QEa0Z)*XMQqUA9GQ81?I(&K=3qpHD<iL9#IehMπU"0AHX%=)i--r?v.j)JGWOFGep&Y*g[q2>6jkrqD-rKCyfwn)\ne_O)V9*)_xr*oLπU"q)MBJUTC*k,[x,f]bC$Cv3sB'1h#?:*YfAW4N[TF=X:gSg,9S2a$[2V+z-tc:kZπU"tP5Wd8WU$Jugu;d5\$A^4D4m.1c.T,7WO#^d>\=JkvUAd^_?$h6O/E3cuo>8=-KπU";dmjo7s2k9sa-&hVn<%UKu8<J0B>OkQGpRn*_n?ugaQc5,-6>g_Z,,,R2.g-EfpπU"zsZ]ZO<M[bdOI'75=df6e\-K)x:=gUh,4BIaCRIb0a6IBEo-yijV:.W#Dm+&zZ8πU"m5c(t,P8Dim/(wmr0+1ZqVhCd_.<]i<a<+300o50rB0ImmOD3?=6dZRS:6BQm^XπU"'rZjr4KHHZ[Z<=stGnqA+tvmASK+meKKC-P,9UYvt,&hT)vd#=nAp&5Wo%K)O,2πU"nvf7ThB3hGay.A^c.eD-$qP4u+Fq4u%p()9%%%%-L%b]>pE#t]-)[%%(%+&%%%1πU"%%%%xuf%hizj%qSmn%lbur%p(V5T60wVG_lAii..-LDY1:tp/m,fB).rbaWBCoBπU"X$8(:FVpVkHlgGZUXb,Z7W?YhspJY6#C:s/'YgRSg2L6Lg&dDMc?1Dj*_$N2rZ6πU"<gY;/D$ez_cc#Lj<[?;7c4M#_ufqwK%b-)6Lr_bL9U^[pk9f0[jO/%o:$dLwtk[πU";tGdp=KB2]31.fd[PctW5kEqtjkfFvRUwV^Pqne8Bm'^\sqcseQHSW$'l[2<W#wπU"4[xjd=QEq5<KoWh7NF/e?bs_/L7Ng5qpdhxi1+0$=NiZ;,1w'u%p()9%%%%-%%6πU"8FRA$qz*?[%%+%I&%%%1%%%%xuf%hizj%qSxm(uDtf%3)F-'4tWdBZ%']ZhxR)fπU"I.2+mn^QK1wdc?U8bW&0TU9E=Lu7kqo$]W&39#oT?e7D'*'OmfZn$6>>ve>G\6LπU"jG\<30hSAgI5C%uUZZ9+W,c)Hu&Y?i4C'b\]pp]5GCVDFPeNhHl;EbR$kB4n8'NπU"tDPPMr]r\*2dumstaFNwCne%Dup(%)9%%%%-%6#8FABc'Tzv#%%%2%-%%0%%%%xπU"%ufhi%zqSl7wufy;*]<UO-u.x,FA*GF&?)nNx3:RQd?^d^[nvlmh/?\J0=DrcPHπU"k19.-p4RMf24l;vx$F)%cD>ckJ.hrKE>ai&kmeP_.T^X'QRgF96%cP9Sils#OXdπU"6SI/<C888c2=M;\%-WcuDacPt\2=&\;r1B[7d'/jk'Wr<[Ob4iJ1N\MAdR0[F2[πU"cWhE=eMGJmb6rED&9\B2z\oDw<1MZ.),YBULp,NU1uxbI[ch?CZG_2/b'=o9tScπU"/R2,7&hJS'os5$\^EKY+.?WXL^fhu'E<9Y=:<<4uPd\[D;9_X25NC7/)nnKmgyNπU"UGH]dU0miS34S.u%p()9%%%%-(%?1$%EgZV(Xm%%+%D%%%%/%%%%wjf%irjS^y'πU"y\'^wuu%-Smq.sz?N+rFvM.tQ%M+MCtT=oEFr#rvmysyiCH7pQBmoExiAsTAGEsπU"PGHLH\^':'lmzmC+YLt.O9tKCK6%d)f4KO2c3sOPG_dsO;^teIMIe'mf:4sUK5_πU"'%Nee+f=MV[QU=qaYkE5;gbo1)Z+ii?egGo+)aa'PtLvkkAAb9d*sDu(Tm8lZBnπU"WoA/Bee%%%up&%'9%9%%%%-%%68F:A&kp)Lo>%4%>?%%%1%%%%%%%%%&%E%%%%%πU"%%%%x%ufhi%zjqS%gfxu%p&'9%%9%%%%-%6[8FA-isSP7%&%%p%(%%1%%%%%%%%πU"%&%%E%%+%C>%%%xuf%hizj%qSif%yup&%'9%9%%%%-%%68F.AF+%,,<&%%%P3%%πU"%1%%%%%%%%%&%E[%%%+%#%%x%ufhi%zjqS%lwuu%p&'9%%9%%#%-%bD]>E#ut])πU"[#%%%+%&%%1%%%%%%%%%&%%E%%(%nB%%%xuf%hizj%qSmn%lup&%'9%9%%%%-%%πU"68FRA$qz*?[%%+%I&%%%1%%%%%%%%%&%E#%%%z%C%%x%ufhi%zjqS%xmuu%p&'9πU"%%9%%%%-%6#8FABc'Tzv#%%%2%-%%0%%%%%%%%%&%%E%%(%0D%%%xuf%hizq%SlπU"wu%up&'%9%9%%%%-%&?1$E%gZVX&m%%%'D%%%%/%%%%%%%%%&%E%.%%VE%%%wj%πU"firj.Sy'y%up*+%%%%%%,%,%&b&%%%rF%%%%%πEND SUBπCLOSE:IF S=53AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπKevin Fowlks                   TIC-TAC-TOE VIA MODEM          KFowlks@aol.com                03-17-96 (20:15)       QB, QBasic, PDS        326  8244     TTTMDM.BAS  REM KD Software aka Kevin FowlksπREM Tic tac toe via modem v3.0πππREM Note this program was writtem in 3 hours so i bet there are a few bugsπREM please modfiy this program any way you like, but please give me creidtπREM also if you to fix / change this program then send me a copy atπREM kfowlks@sojourn.com attached files are cool at the addressπππREM Fixed one of the many bugs in this versionπREM fixed Some more bugs now i all most sure it works okππREM Damit damit i overlooked one simple problem i must convert the data toπREM strings sorry about that guys :)ππREM This version should work also push esc to escapeππDECLARE SUB cir (x%, y%)πDECLARE SUB movex (x1%, y1%)πDEFINT A-ZππREM dymamic$πRANDOMIZE TIMERπCONST true = 1, false = 0πππDIM grid(3, 3) AS INTEGERππCLSπCOLOR 7ππINPUT "Enter Com Port (1/2) "; port$πPRINT "Opening Com" + port$ + " Opening port for 9600 baud"πOPEN "COM" + port$ + ":" + "2400,N,8,1,ASC" FOR RANDOM AS #1πππINPUT "[C]ALL OR [W]AIT: ", AN$πIF AN$ = "W" OR AN$ = "w" THENπserver% = falseπPRINT #1, "ATS0=1" + num$: PRINT "WAITING FOR CALL"πELSE IF AN$ = "C" OR AN$ = "c" THEN INPUT "ENTER NUMBER ", num$: PRINT #1, "atd" + num$πserver% = trueπEND IFπππππDOπINPUT #1, test$πBaud$ = "CONNECTED 9600"πBaud2$ = "CONNECTED 2400"πIF test$ = "BUSY" THENπPRINT "Line Busy try later"πSLEEPπENDπEND IFπLOOP UNTIL test$ = Baud$ OR test$ = Baud2$ OR INKEY$ = CHR$(27)π'hh:πππππ IF server% = true THENπ PRINT "This computer is the server": turn% = 1π ELSEIF server% = false THENπ PRINT "This computer is the host": turn% = 2π END IFπππSCREEN 13πππREM tic tac toe     πREM Draw Boardπx% = 320 / 4 'center the dam thingππLINE (0 + x%, 50)-(150 + x%, 50), 9πLINE (0 + x%, 100)-(150 + x%, 100), 9πLINE (45 + x%, 10)-(45 + x%, 140), 9πLINE (100 + x%, 10)-(100 + x%, 140), 9πππππDOπIF server% = true THENπREM Caller's program and x'sπSELECT CASE INKEY$ππREM 90,15:REM  140,15:REM   190,15πREM 90,60      140,60       190,60πREM 90,110     140,110      190,110ππCASE "7": CALL movex(90, 15): grid(1, 1) = 2: Ikey = 7πCASE "4": CALL movex(90, 60): grid(1, 2) = 2:     Ikey = 4πCASE "1": CALL movex(90, 110): grid(1, 3) = 2:   Ikey = 1ππCASE "8": CALL movex(140, 15): grid(2, 1) = 2: Ikey = 8πCASE "5": CALL movex(140, 60): grid(2, 2) = 2: Ikey = 5πCASE "2": CALL movex(140, 110): grid(2, 3) = 2: Ikey = 2ππCASE "9": CALL movex(190, 15): grid(3, 1) = 2: Ikey = 9πCASE "6": CALL movex(190, 60): grid(3, 2) = 2: Ikey = 6πCASE "3": CALL movex(190, 110): grid(3, 3) = 2: Ikey = 3ππCASE CHR$(27): ENDππCASE ELSEππππIF win% = 1 THEN PRINT "You win% player"; num$ππIF turn% = 1 THENπLOCATE 20, 5: PRINT "Make your move"πIF Ikey = 7 THEN PRINT #1, "1", "1": turn% = 2πIF Ikey = 4 THEN PRINT #1, "1", "2": turn% = 2πIF Ikey = 1 THEN PRINT #1, "1", "3": turn% = 2ππIF Ikey = 8 THEN PRINT #1, "2", "1": turn% = 2πIF Ikey = 5 THEN PRINT #1, "2", "2": turn% = 2πIF Ikey = 2 THEN PRINT #1, "2", "3": turn% = 2ππIF Ikey = 9 THEN PRINT #1, "3", "1": turn% = 2πIF Ikey = 6 THEN PRINT #1, "3", "2": turn% = 2πIF Ikey = 3 THEN PRINT #1, "3", "3": turn% = 2ππEND IFπππππππIF turn% = 2 THENπLOCATE 20, 5: PRINT "Wait for computer2 to move"πINPUT #1, cpua$, cpub$ππREM 90,15:REM  140,15:REM   190,15πREM 90,60      140,60       190,60πREM 90,110     140,110      190,110ππREM read and convert incomeing dataππIF cpua$ = "1" AND cpub$ = "1" THEN ma% = 90: mb% = 15πIF cpua$ = "1" AND cpub$ = "2" THEN ma% = 90: mb% = 60πIF cpua$ = "1" AND cpub$ = "3" THEN ma% = 90: mb% = 110ππIF cpua$ = "2" AND cpub$ = "1" THEN ma% = 140: mb% = 15πIF cpua$ = "2" AND cpub$ = "2" THEN ma% = 140: mb% = 60πIF cpua$ = "2" AND cpub$ = "3" THEN ma% = 140: mb% = 110ππIF cpua$ = "3" AND cpub$ = "1" THEN ma% = 190: mb% = 15πIF cpua$ = "3" AND cpub$ = "2" THEN ma% = 190: mb% = 60πIF cpua$ = "3" AND cpub$ = "3" THEN ma% = 190: mb% = 110πππCALL cir(ma%, mb%)πππgrid(VAL(cpua$), VAL(cpub$)) = 2: ' turn% = 1πIF cpua$ > "" THEN turn% = 1πππEND IFππππππ  π   v = grid(1, 1)π   v2 = grid(1, 2)π   v3 = grid(1, 3)π  π   b = grid(2, 1)π   b2 = grid(2, 2)π   b3 = grid(2, 3)ππ   n = grid(3, 1)π   n2 = grid(3, 2)π   n3 = grid(3, 3)ππ'LOCATE 1, 1π'PRINT v; b; nπ'PRINT v2; b2; n2π'PRINT v3; b3; n3ππππIF grid(1, 1) = 2 AND grid(2, 2) = 2 AND grid(3, 3) = 2 THEN win% = 1πIF grid(3, 1) = 2 AND grid(2, 2) = 2 AND grid(1, 3) = 2 THEN win% = 1πIF grid(2, 1) = 2 AND grid(2, 2) = 2 AND grid(2, 3) = 2 THEN win% = 1ππIF grid(1, 1) = 2 AND grid(2, 1) = 2 AND grid(3, 1) = 2 THEN win% = 1πIF grid(1, 2) = 2 AND grid(2, 2) = 2 AND grid(3, 2) = 2 THEN win% = 1πIF grid(1, 3) = 2 AND grid(2, 3) = 2 AND grid(3, 3) = 2 THEN win% = 1ππIF grid(1, 1) = 2 AND grid(1, 2) = 2 AND grid(1, 3) = 2 THEN win% = 1πIF grid(2, 1) = 2 AND grid(2, 2) = 2 AND grid(2, 3) = 2 THEN win% = 1πIF grid(3, 3) = 2 AND grid(3, 2) = 2 AND grid(3, 3) = 2 THEN win% = 1ππIF win% = 1 THEN PRINT "You win% player"πππππREM If you called the personπEND SELECTπ  ππELSEIF server% = false THENππSELECT CASE INKEY$ππREM 90,15:REM  140,15:REM   190,15πREM 90,60      140,60       190,60πREM 90,110     140,110      190,110ππCASE "7": CALL cir(90, 15): grid(1, 1) = 1: Ikey = 7πCASE "4": CALL cir(90, 60): grid(1, 2) = 1: Ikey = 4πCASE "1": CALL cir(90, 110): grid(1, 3) = 1: Ikey = 1ππCASE "8": CALL cir(140, 15): grid(2, 1) = 1:  Ikey = 8πCASE "5": CALL cir(140, 60): grid(2, 2) = 1:  Ikey = 5πCASE "2": CALL cir(140, 110): grid(2, 3) = 1:  Ikey = 2ππCASE "9": CALL cir(190, 15): grid(3, 1) = 1: Ikey = 9πCASE "6": CALL cir(190, 60): grid(3, 2) = 1:  Ikey = 6πCASE "3": CALL cir(190, 110): grid(3, 3) = 1:  Ikey = 3ππCASE CHR$(27): quit = 1: ENDππCASE ELSEπππ π   v = grid(1, 1)π   v2 = grid(1, 2)π   v3 = grid(1, 3)π π   b = grid(2, 1)π   b2 = grid(2, 2)π   b3 = grid(2, 3)ππ   n = grid(3, 1)π   n2 = grid(3, 2)π   n3 = grid(3, 3)ππ'LOCATE 1, 1π'PRINT v; b; nπ'PRINT v2; b2; n2π'PRINT v3; b3; n3πππIF grid(1, 1) = 1 AND grid(2, 2) = 1 AND grid(3, 3) = 1 THEN win% = 1πIF grid(3, 1) = 1 AND grid(2, 2) = 1 AND grid(1, 3) = 1 THEN win% = 1πIF grid(2, 1) = 1 AND grid(2, 2) = 1 AND grid(2, 3) = 1 THEN win% = 1πIF grid(1, 1) = 1 AND grid(2, 1) = 1 AND grid(3, 1) = 1 THEN win% = 1πIF grid(1, 2) = 1 AND grid(2, 2) = 1 AND grid(3, 2) = 1 THEN win% = 1πIF grid(1, 3) = 1 AND grid(2, 3) = 1 AND grid(3, 3) = 1 THEN win% = 1πIF grid(1, 1) = 1 AND grid(1, 2) = 1 AND grid(1, 3) = 1 THEN win% = 1πIF grid(2, 1) = 1 AND grid(2, 2) = 1 AND grid(2, 3) = 1 THEN win% = 1πIF grid(3, 3) = 1 AND grid(3, 2) = 1 AND grid(3, 3) = 1 THEN win% = 1ππIF win% = 1 THEN PRINT "You win player"ππIF turn% = 1 THENπLOCATE 20, 5: PRINT "Make you move"ππIF Ikey = 7 THEN PRINT #1, "1", "1": turn% = 2πIF Ikey = 4 THEN PRINT #1, "1", "2": turn% = 2πIF Ikey = 1 THEN PRINT #1, "1", "3": turn% = 2πIF Ikey = 8 THEN PRINT #1, "2", "1": turn% = 2πIF Ikey = 5 THEN PRINT #1, "2", "2": turn% = 2πIF Ikey = 2 THEN PRINT #1, "2", "3": turn% = 2πIF Ikey = 9 THEN PRINT #1, "3", "1": turn% = 2πIF Ikey = 6 THEN PRINT #1, "3", "2": turn% = 2πIF Ikey = 3 THEN PRINT #1, "3", "3": turn% = 2πππEND IFππREM read and convert incomeing dataπIF turn% = 2 THENπLOCATE 20, 5: PRINT "Wait for computer2 to move"πINPUT #1, cpua$, cpub$πππIF cpua$ = "1" AND cpub$ = "1" THEN ma% = 90: mb% = 15πIF cpua$ = "1" AND cpub$ = "2" THEN ma% = 90: mb% = 60πIF cpua$ = "1" AND cpub$ = "3" THEN ma% = 90: mb% = 110ππIF cpua$ = "2" AND cpub$ = "1" THEN ma% = 140: mb% = 15πIF cpua$ = "2" AND cpub$ = "2" THEN ma% = 140: mb% = 60πIF cpua$ = "2" AND cpub$ = "3" THEN ma% = 140: mb% = 110ππIF cpua$ = "3" AND cpub$ = "1" THEN ma% = 190: mb% = 15πIF cpua$ = "3" AND cpub$ = "2" THEN ma% = 190: mb% = 60πIF cpua$ = "3" AND cpub$ = "3" THEN ma% = 190: mb% = 110πππCALL movex(ma%, mb%)ππgrid(VAL(cpua$), VAL(cpub$)) = 1πIF cpua$ > "" THEN turn% = 1πEND IFπEND SELECTπEND IFπLOOPππCLOSE #1πENDππSUB cir (x%, y%)πCIRCLE (x% + 13, y% + 13), 13ππEND SUBππSUB movex (x1%, y1%)πLINE (0 + x1%, 0 + y1%)-(18 + x1%, 18 + y1%)πLINE (0 + x1%, 18 + y1%)-(18 + x1%, 0 + y1%)ππEND SUBππAlan Bruzzi                    SPACE INVADERS                 FidoNet QUIK_BAS Echo          03-12-96 (19:38)       QB, QBasic, PDS        68   2919     INVADER.BAS 1  DIM A$(10, 5), FLAG(10, 5), PS(40), PT(40)π  RANDOMIZE 10π  SCREEN 13: CLSπ  DX = 1: DY = 1: DDX = 1: X3 = 20: X1 = 20: Y1 = 23: SC = 0: C = 0π  JK = 0: SHIPS = 3: COLOR 1: I1 = X1: JJ = 0π  COLOR 15: LOCATE 24, 1: FOR T = 1 TO 40: PRINT "-"; : NEXTπ5  COLOR 3: LOCATE 17, 5: PRINT "███"π   LOCATE 18, 4: PRINT "██"; : PRINT "1"; :  PRINT "██"π   LOCATE 19, 4: PRINT "██ ██"ππ   LOCATE 17, 20: PRINT "███"π   LOCATE 18, 19: PRINT "██"; : PRINT "2"; : PRINT "██"π   LOCATE 19, 19: PRINT "██ ██"ππ   LOCATE 17, 34:  PRINT "███"π   LOCATE 18, 33:  PRINT "██"; : PRINT "3"; : PRINT "██"π   LOCATE 19, 33:  PRINT "██ ██"ππ  FOR Y = 1 TO 5: FOR X = 1 TO 10: A$(X, Y) = CHR$(234): FLAG(X, Y) = 0: NEXT: NEXTπ  FOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2: PS(K) = K: PT(J) = J: NEXT: NEXTπ  MISY = PT(10)π15 X = 1: Y = 1: FOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2πIF FLAG(X, Y) = 0 THEN LOCATE PT(J), PS(K): COLOR INT(RND(1) * 15) + 1: PRINT A$(X, Y)πX = X + 1: IF X > 10 THEN X = 1πNEXT: Y = Y + 1: IF PT(J) = 22 OR SHIPS <= 0 THEN LOCATE 10, 17: PRINT "GAME OVER": FOR O = 1 TO 100000: NEXT: GOTO 1πNEXTπFOR M = 1 TO 5000: NEXTπGOSUB 50: GOSUB 300πLOCATE 1, 1: COLOR 15: PRINT "SCORE ="; SC: LOCATE 1, 30: PRINT "SHIPS ="; SHIPSπGOSUB 100πIF Y1 <= 2 THEN JJ = 0: LOCATE Y1, X1: PRINT CHR$(32): Y1 = 23πIF JJ = 0 THEN Y1 = 23πIF JJ = 1 THEN I1 = I1: LOCATE Y1, I1: COLOR 15: PRINT CHR$(254): FOR L = 1 TO 500: NEXT: GOSUB 200: LOCATE Y1, I1: PRINT CHR$(32)πY1 = Y1 - 1πFOR J = 2 TO 10 STEP 2: FOR K = 2 TO 20 STEP 2πLOCATE PT(J), PS(K): PRINT " "πNEXT: NEXTπFOR M = 1 TO 5000: NEXTπGOSUB 50πGOSUB 300πFOR X = 2 TO 20 STEP 2π   PS(X) = PS(X) + DDX: IF PS(X) > 38 THEN DDX = -DDX: FOR Y = 2 TO 20 STEP 2: PT(Y) = PT(Y) + 1: NEXTπIF PS(X) = 0 THEN PS(X) = PS(X) + 2: DDX = -DDX: FOR Y = 2 TO 20 STEP 2: PT(Y) = PT(Y) + 1: NEXTπ   NEXTπ   GOTO 15π50    LOCATE 23, X1: COLOR 14: PRINT CHR$(127)π      RETURNπ100 A$ = INKEY$: IF A$ = "" THEN RETURNπ    IF A$ = "," THEN LOCATE 23, X1: PRINT " ": X1 = X1 - 1: A$ = ""π    IF A$ = "." THEN LOCATE 23, X1: PRINT " ": X1 = X1 + 1:  A$ = ""π    IF A$ = " " THEN JJ = 1: I1 = X1π    IF A$ = CHR$(27) THEN ENDπ    IF X1 = 0 THEN X1 = X1 + 1π    IF X1 = 39 THEN X1 = X1 - 1π    RETURNπ200 FOR J1 = 2 TO 10 STEP 2: FOR J2 = 2 TO 20π    IF FLAG(J2 / 2, J1 / 2) = 0 AND I1 = PS(J2) AND Y1 = PT(J1) THEN A$(J2 / 2, J1 / 2) = " ": FLAG(J2 / 2, J1 / 2) = 1: BEEP: JJ = 0: Y1 = 23: SC = SC + 10π    NEXT: NEXTπ    RETURNπ300 IF JK = 0 THEN GOSUB 400: MISY = PT(10) + 1: JK = 1: MM = PS(M)π    LOCATE MISY, MM: COLOR 15: PRINT CHR$(254): FOR L = 1 TO 2000: NEXT: LOCATE MISY, MM: PRINT CHR$(32)π    MISY = MISY + 1: IF MISY = 23 THEN JK = 0π    L = SCREEN(MISY, MM): IF L = 127 THEN SHIPS = SHIPS - 1: BEEP: FOR T = 1 TO 1000: NEXTπ    RETURNπ400 M = INT(RND(1) * 20) + 2: N = M MOD 2π    IF N = 1 THEN 400π    RETURNππJustin Pasher                  BOX-CAR RACES                  FidoNet QUIK_BAS Echo          03-18-96 (18:06)       QB, QBasic, PDS        268  6299     BCRACE.BAS  'Try this code. Maybe looks a little nicer. I wrote this about 3 yrs agoπ'and haven't looked at it since, so many improvements can be made.πON ERROR GOTO 55000πMONEY = 50π1000000 CLSπSCREEN 8πPRINT "                          WELCOME TO THE BOX-CAR RACES  v1.3"πPRINT : PRINT "                          TODAY'S ODDS ARE AS FOLLOWS:"π LOCATE 2, 1: PRINT "$"; STR$(MONEY); ".00"πRANDOMIZE TIMERπDEF FNODD1 = INT(10 * RND) + 1πDEF FNODD2 = INT(10 * RND) + 1πDEF FNODD3 = INT(10 * RND) + 1πDEF FNODD4 = INT(10 * RND) + 1πDEF FNODD5 = INT(10 * RND) + 1πA = FNODD1πB = FNODD2πC = FNODD3πD = FNODD4πE = FNODD5πCOLOR 2πPRINT : PRINT "BOX #1 : "; A; " TO 1"πCOLOR 3πPRINT : PRINT "BOX #2 : "; B; " TO 1"πCOLOR 5πPRINT : PRINT "BOX #3 : "; C; " TO 1"πCOLOR 6πPRINT : PRINT "BOX #4 : "; D; " TO 1"πCOLOR 8πPRINT : PRINT "BOX #5 : "; E; " TO 1"πCOLOR 15πIF MONEY = 1 THEN BET = 1: GOTO 24π23 LOCATE 14, 10: PRINT "                                              "πLOCATE 14, 1: PRINT "WHAT IS YOUR BET (IN DOLLAR AMOUNTS ONLY, " + "<ENTER> for ALL)--->";πINPUT BETπIF BET = 0 THEN BET = MONEYπIF BET > MONEY THENπ   LOCATE 16, 1: PRINT "YOU DON'T HAVE "; STR$(BET); " DOLLAR(S)!"π   GOSUB 50000: LOCATE 16, 1π   PRINT "                                         ": LOCATE 14, 65π   PRINT "        ": GOTO 23πELSE IF BET < 0 GOTO 27πEND IFπBET = INT(BET): IF BET = 0 GOTO 27πGOTO 24π27 PRINT : PRINT "YOU WIMP. AT LEAST BET 1 DOLLAR!": GOSUB 50000π   LOCATE 16, 1: PRINT "                                ": GOTO 23π24 LOCATE 16, 10: PRINT "                                  "π   LOCATE 16, 1: INPUT "WHICH BOX DO YOU WANT TO BET ON --->"; BETNUMπIF BETNUM < 1 OR BETNUM > 5 THEN LOCATE 18, 1: PRINT "BETWEEN 1 AND 5!": GOSUB 50000: LOCATE 18, 1: PRINT "                       ": GOTO 24πCLSπIF BETNUM = 1 THEN Z = AπIF BETNUM = 2 THEN Z = BπIF BETNUM = 3 THEN Z = CπIF BETNUM = 4 THEN Z = DπIF BETNUM = 5 THEN Z = EπLOCATE 24, 30: PRINT "BET : "; STR$(BET); ".00    #"; STR$(BETNUM);πPRINT ".  Odds : "; Z; "to 1."π' TRACK CONSTRUCTIONπCOLOR 4πLINE (0, 0)-(640, 0)πLINE (0, 20)-(640, 20)πLINE (0, 40)-(640, 40)πLINE (0, 60)-(640, 60)πLINE (0, 80)-(640, 80)πLINE (0, 100)-(640, 100)πLINE (600, 0)-(640, 100), 0, BFπLINE (600, 0)-(639, 100), , BπLOCATE 2, 78πCOLOR 15πPRINT "F"πLOCATE 4, 78πPRINT "I"πLOCATE 6, 78πPRINT "N"πLOCATE 8, 78πPRINT "I"πLOCATE 10, 78πPRINT "S"πLOCATE 12, 78πPRINT "H"πLOCATE 2, 72πPRINT "1"πLOCATE 2, 2πPRINT "1"πLOCATE 4, 72πPRINT "2"πLOCATE 4, 2πPRINT "2"πLOCATE 7, 72πPRINT "3"πLOCATE 7, 2πPRINT "3"πLOCATE 9, 72πPRINT "4"πLOCATE 9, 2πPRINT "4"πLOCATE 12, 72πPRINT "5"πLOCATE 12, 2πPRINT "5"πLINE (20, 0)-(20, 100), 4πFOR I = 1 TO 1000: NEXT IπLOCATE 14, 2πPRINT "PRESS A KEY IF READY!"πDOπ kbd$ = INKEY$πLOOP WHILE kbd$ = ""πLINE (0, 101)-(200, 200), 0, BFπLOCATE 14, 2πPRINT "READY?"πLOCATE 14, 2πPLAY "MF O3 L3 C"πSLEEP 1πPRINT "SET?          "πLOCATE 14, 2πPLAY "MF O3 L3 C"πSLEEP 1πPRINT "GO!!!!!!!!!!"πPLAY "MB O5 L3 C"π' CAR'S SPEEDπRANDOMIZE TIMERπA1 = 1πA2 = 1πA3 = 1πA4 = 1πA5 = 1π15 A1 = A1 + INT(RND * 10)πGOTO 30π25 A2 = A2 + INT(RND * 10)πGOTO 40π35 A3 = A3 + INT(RND * 10)πGOTO 50π45 A4 = A4 + INT(RND * 10)πGOTO 60π55 A5 = A5 + INT(RND * 10)πGOTO 70π30 IF A1 = 0 THEN GOTO 15 ELSE GOTO 25π40 IF A2 = 0 THEN GOTO 25 ELSE GOTO 35π50 IF A3 = 0 THEN GOTO 35 ELSE GOTO 45π60 IF A4 = 0 THEN GOTO 45 ELSE GOTO 55π70 IF A5 = 0 THEN GOTO 55 ELSE GOTO 10000ππ10000 ' DRAW CARπLINE (A, 0)-(A + 20, 0), 4πLINE (A1, 5)-(A1 + 20, 15), 2, BFπLINE (A2, 25)-(A2 + 20, 35), 3, BFπLINE (A3, 45)-(A3 + 20, 55), 5, BFπLINE (A4, 65)-(A4 + 20, 75), 6, BFπLINE (A5, 85)-(A5 + 20, 95), 8, BFπIF A1 >= 580 OR A2 >= 580 OR A3 >= 580 OR A4 >= 580 OR A5 >= 580 THEN GOTO 100πLINE (A1, 5)-(A1 + 20, 15), 0, BFπLINE (A2, 25)-(A2 + 20, 35), 0, BFπLINE (A3, 45)-(A3 + 20, 55), 0, BFπLINE (A4, 65)-(A4 + 20, 75), 0, BFπLINE (A5, 85)-(A5 + 20, 95), 0, BFπCOLOR 15πLOCATE 2, 72πPRINT "1"πLOCATE 2, 2πPRINT "1"πLOCATE 4, 72πPRINT "2"πLOCATE 4, 2πPRINT "2"πLOCATE 7, 72πPRINT "3"πLOCATE 7, 2πPRINT "3"πLOCATE 9, 72πPRINT "4"πLOCATE 9, 2πPRINT "4"πLOCATE 12, 72πPRINT "5"πLOCATE 12, 2πPRINT "5"πLINE (20, 0)-(20, 100), 4ππGOTO 15π100 LOCATE 14, 2πPRINT "WE HAVE A WINNER!!!"ππIF A1 > A5 THEN GOTO 2000πGOTO 1π2000 IF A1 < A4 THEN GOTO 1πIF A1 < A3 THEN GOTO 1πIF A1 < A2 THEN GOTO 1πGOTO 200ππ1 IF A2 > A1 THEN GOTO 3000πGOTO 2π3000 IF A2 < A3 THEN GOTO 2πIF A2 < A4 THEN GOTO 2πIF A2 < A5 THEN GOTO 2πGOTO 300ππ2 IF A3 > A1 THEN GOTO 4000πGOTO 3π4000 IF A3 < A2 THEN GOTO 3πIF A3 < A4 THEN GOTO 3πIF A3 < A5 THEN GOTO 3πGOTO 400ππ3 IF A4 > A1 THEN GOTO 5000πGOTO 4π5000 IF A4 < A2 THEN GOTO 4πIF A4 < A3 THEN GOTO 4πIF A4 < A5 THEN GOTO 4πGOTO 500ππ4 GOTO 600ππFOR I = 1 TO 800: NEXT Iπ200 XX$ = "1"πXX = 1πGOTO 1000π300 XX$ = "2"πXX = 2πGOTO 1000π400 XX$ = "3"πXX = 3πGOTO 1000π500 XX$ = "4"πXX = 4πGOTO 1000π600 XX$ = "5"πXX = 5πGOTO 1000π1000 PRINT "THE WINNER IS THE BOX IN LANE "; XX$; "!!!!!!!!!!"πPRINT "DISTANCE OF CAR IN LANE 1="; A1πPRINT "DISTANCE OF CAR IN LANE 2="; A2πPRINT "DISTANCE OF CAR IN LANE 3="; A3; ""πPRINT "DISTANCE OF CAR IN LANE 4="; A4πPRINT "DISTANCE OF CAR IN LANE 5="; A5πIF BETNUM <> XX THEN PRINT : PRINT "YOU LOSE $"; LTRIM$(STR$(BET));πPRINT "!": MONEY = MONEY - BET: GOTO 700πIF BETNUM = 1 THEN BET = BET * AπIF BETNUM = 2 THEN BET = BET * BπIF BETNUM = 3 THEN BET = BET * CπIF BETNUM = 4 THEN BET = BET * DπIF BETNUM = 5 THEN BET = BET * EπPRINT : PRINT "CONGRATULATIONS. YOU HAVE WON $"; LTRIM$(STR$(BET)); "!"πMONEY = MONEY + BETπ700 IF MONEY <= 0 THEN PRINT "UH-OH. IT LOOKS LIKE YOUR BROKE! " + "HA, HA. COME BACK SOME OTHER TIME.     ": ENDπPRINT "ANOTHER RACE?(Y\N)";πDOπ kbd$ = INPUT$(1)π kbd$ = UCASE$(kbd$)π IF kbd$ = "Y" THEN EXIT DOπ IF kbd$ = "N" THEN EXIT DOπ BEEPπLOOPπPRINT kbd$πIF kbd$ = "Y" THEN GOTO 1000000πIF kbd$ = "N" THEN ENDπENDππ' G O S U B   S E C T I O Nππ50000 SLEEP 2: RETURNπ55000 SCREEN 0π      IF ERR = 53 THEN 56000π      PRINT : PRINT "Warning!! Error"; ERR; " occured! Aborting..."π      ENDπ56000 PRINT : PRINT "Warning!! Error"; ERR; " occured! Aborting..."π      ENDππChris Sequeria                 LUNAR LANDER                   QBasic WWW Page @ lookup.com   12-04-95 (00:00)       QB, QBasic, PDS        191  12651    LUNAR.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"LANDER.ZIP",4^6:Z&=9228:?STRING$(50,177);πU"%up()%9%%%7-%tq/IEod+k\VE#%%gS%%%/%%%%qf%sijw%SgfxWfLvFuS3+aih,πU"zxi<cb6hPeClX6S-vNb-c_bU..]j'V<hHT8]oF)X=j_2j7G).NZH3Ba<>jmTLXDπU"L:b%(#[ck(H8Y?rF[?^gf6GWs#8uI/haLwlg9/f%$F1AGNGg'kT:,a:QH?IkE;gπU"FtpJufH]0\<H1RgF+636quQ8OEI2B-54:+WLG+oTu]i'SS[5,5'EvfT.okqwEaCπU"U=wnR\Mh0OE1Ctj>I<H-TU'Og5/?EdI1e<E.l??5Glh=d5e:o(::UeXBW0sPomBπU"6mdD4=Mnb88_Du^)Ce1_^8gq#HvZlG:3\3S=eVe+7f]#GuvZ-po*\ORgbNmH9e2πU"H&d#Hc$?eOn>8DK:*D=R55>P#xSKOQawP,KrOp$5/ogcU[rbem4Wei:1ilmBHhbπU"Q$e$]qd:Sr^W>9UVBO-);o:,[?)lv#3,KY?P00-Sr$a[nJUrm[&KQg+Gk6yM%]&πU"xP1LWK12=6ZEi5z9h0LRiT)Fc8hcU#^hImJGCa60d54=5v(:AD*&2;WLJ5A.-7_πU"(_a&C[x;;U]dhW>2Xg,6;v%c_59=Mq'uMRE.41/8dxDN'L'1#8PL[+F1*Am>2a[πU"cL)$fV^Ui$o><'#sKg8R](ufSdb7/D30:N;i4P^I*g'16gTQO)7qI_m=HN2.-O*πU"BH_B3<:Fk&l?-vTEXmnatK32Co7=RUNv(+'/mkhJ1TK;QCqg*j6jO>+VG2O2:>eπU"129<W5()3(')e)6hlYe.zQRZ23j^mP/2Mum+P;nK#&<Yc?uOqT?c&;Mb>Q(Tkw)πU"-ePxWGW#/3/dFlv473x)w;?1$cWbp\>R*YVu=*g.87j#]5/(1BYE*aJXsCCAmq;πU"Z(hQ4*/<R:QK,4)g[:uE'DDi3]V-0/9KTkVWGf%HY&Q1t#x:[u%'dJFbFEhN3tRπU".yd60a[4LoOlvj0sZcg?un$:??OZHaA6(:-<YU$zJyZGwH:/+jd?Q9)=1_%+#\fπU"]6=Fx_JFa$STC*D&*E5#GFL+qpCg8,6.'4:*dJ54#E^NhrESk:ocNFZih+CO3TJπU"HI):lAhuu>=j_RiF0%'iF3Us*w9Bx]DldM/C2gdj00z12iv-<'TU^l*KIL12l<BπU"7kV'N#rTFi$76[h*hjj/frHHtg'VgcK(R3NL?i8*U(+yS]#('9:^J'lO,lc/X9GπU"hp#qAG$Za<WruaX<dlMV.ye<KfgAhHadLNi;+MW8skbtiPA-=6kO/YGeqF+Akh(πU"OpYnV[KcZ&hT$JT;*h=sq[ZX4cZ.hurlTKrW<&j_YxnR#T\Vlg18XMbq)_3lnQ#πU"#<g.W1#2^rvtW3rZ3j/L?F0Y1]#sOZ;j#Gq>]miK/MLB,,\nUU2]Wak<dQlitUPπU"N85BbueF_>(qnz_KL>V.kWPdi^0H-h#2^KibbT4rc,plL:5Pfjt=tIoA(:]Sub2πU"47tc*LQ0>_vLX_84ZLGV>+<GQ3W;Kj0U5.+_qUbxen.JbG/ajdk&l)UNEQu/wB6πU"L_ysYdnc;r6W0ek^W>.ZHc2iQcKmWmXqULXg+F636ro$tD:*\gql\nmMmm6B>71πU"9gT5qC(uH7T8k2D6Udkh'$-D<5'6J^pcyuR[>yo8;-eY*3Hy%VNlyNMdy6\M(]_πU"?YYy5mQn&Ao7^qH/n^/F_N_)FUZS7jQmG-+tn0mTWUgV2IRm#Ged=VC>J.O*M5TπU"<RkoU75nUf$tnm^+bCZJo=R_H%t<1m:r3\D->-\GeW-)KF_KPG563jWXif&,XaPπU"v)cjV7d+HX1&NJN5S6lv9;uM.w]8sw8rSd#G2yLqn-1FrVX/pFEp$$hbdI&bW.lπU"]Rd:$2we*kNBLlc</M(^V7THIrYg?75g1.oZwd;LqH/SCyY8FZYUNa=b)ne_^BYπU"'QlX_4AZ0kcLX:hgwrT8C$(;rV($B=Aazm(5IoM+f/tnY'Z%<R*KJnCo,LP\d79πU"LCaM4h-O/V'kAT*1#B9]pl[\O.if%UW4gXlrjZIjmXU\6Wa5&'7m?#i3/8Nf,%qπU"Xh\F-]7Pe%-KH>+U:P]&zIEih<c()#l;gaZ9cNqFxHO?ivgSSe'v*KT\?M0m4'=πU"CFm&EU+vg7]j33<qd0szi>+n%v::rk':luEa3/3MAi:YTY^Sl$oRX-<oTYiwVX/πU"C#GEKW<;>Xe-XdaD,ncx,,L]w:CGRlha\E#rVK#Arl1:AQq'qh&'\%Q1vwsi2TnπU"$h/Y]6.(Jh1M0BJ=eOUDh-Ni[+GxlH1d;P5QP>wXayBn^o/iUMaGnH>B*,\YtrXπU".7m)dQ]H6S1iSDhRqId'tN:Y9_ChE.Tuh/t:L&meL/+X.$=CrIAiIozK,MN_m6mπU"0L]&r-ztIKfi$Ju$8.ZV\T635r,d5kn2R&OJt-NO]&[Vc$iAW<-yi',)&17tx*2πU"A2%>lyo>Qm7imvW<&*f='$J3:t0^===X]i(D=5,[+f]eG1QJCe;qT8%6re'DOMWπU"KrDlA9\DU6<'w:6Wa5A>D\#L[c2F?8,x'Uh-OoU3y7:7A/te=ZfvmjxX(s.Qx$(πU"Fz&fr4+fi5GO&XFL-d5fu^aL-M/,et#kqRQ?McE3'd+\4s\W,Yu=$l1Odf4fAl)πU"uTmWbZcX84%L+]pQb.Ndt^_'LDP$3_GP>^h<t&nI_dlVU+anzu>mHeRXa0kyJd9πU"KK(npBX]OgTHC;%^9,bGb#Jx-tfrcY,n]'9wu\N8hmAg>>Z5X6f9826x.iMt\NdπU"mhrPQR(P9v-*=q?.KNA2y<O=PslXMIuihV)4h&zFjtpw3ON'zc]hhq9j]mxo8juπU">-Z^hR<\Idt:\UC%bmWP)&)f4J:baKW59(xr.o\$dtbo$j3O[Pqiq6$.=,9DENdπU"MLa7&NN':dn[a%NNYs-R-od?Yh#?-N<^y'feXOeqr</f,T=Gk6*\4B81#>;k=5EπU"2K.P-90QhR%yUW1P.E,fJTu?$Dwno,vZ=D6(lHigbc:o>ZX:6pA\l-^<6JMLR-BπU"h_NqKHMaD)Ligj)CuOYG2f?+:tILy#2yYWsxF]L.,AqD+yT=W\QO,hkD:c)OuWSπU"PJN,sGcCA-^t7\%Ynj83GG\#Wj5KEeP#a(Oorb+VO_(Qg3:iQQ>>PC+K<njoIVxπU"DKo__V;-HEtQV#FR8d>L?_O9D2uqY.>#6R#ZO6*_^<uDI-o&$AZTtXeABb?6BeuπU"YyX_]mM/c*.m8R.J,5^qX?.AMDayXhhi#6K%(.n3G9Amx^DGoR:O^N?TbWRLK+_πU"(wS[kP?ZhGgr/6zR4^-C49A%\5A2767W;z;Z\b#)ibofi^Hp'>6mD4$,-T]9,jUπU"?O*7jzK/M0fqJ-o3Kd8)dI/V4krAAk3<%/n8TT-_d<>6l+lThWIbx[]R8otj#HhπU"V+Ll\4;'S+QrG21o?Qh8dl\xa_AEsI=B-?tt>t-I0IQ]=Watjqn/VbwaK90w;oYπU"=S5ntRxJB'Cx1>*v%fMrlyboCd^xF*^9c%p&\pbngPUg;Tag'&g_g6lcJ-Q12fOπU"U4pNR#mo.2DysUw&lfGUbq7E[1.<RV*409tEVt;kjQf_Zii<=s:eLC0KuJcjDs*πU"U80($geKsxmHKE.te[n:X&0H'#f^gjEm0_?i[]RN^Wmy+'O&m\4[)XLRr'?wdrtπU"I,?dJ52)\=\ubi+v+9s'aPXREF%2iA9go399RvxKRd\Le)4v*V:dx:sB>;suC_CπU"EYkR1Sel_r(I/[3[p;h]b/$__=7xLE*Y4K41jW=gg6qT45$+6j4K+[^sd#RgB[VπU"8;][XZiBA9E:][W?NBej9zGre-cDVtk.?>&Pg1tDUC/LE##qVJ$JS<$uZf%Fk'hπU"VyXT_ov0B4Z'>1j^E](M]A>l,EAnt1nUwG*XfqChkS3S$Mq>]6U]\uHFBYo8=IdπU"lwjK5y$J0QR>&H-^jkbO]U:_m#0DbrqN<q#IX(Xr:873PrQP3lN)Wd\KsJp/mP3πU"ISW*8Dq%laax+Fb[agbDqaO1+_hMf1yfy0%?\w?kIN['lZL?SIDIw+G\GxdfnMyπU"Jg]Rfnj[k,V*5u#V%Ok8YiQajcp/uE%[omaNNHU=Hu^%BAn5sbfViHBQ]:Da8#zπU"\p_VQnuH05E':7rfJVaI>'hHRoK?W;H+0&j5q854*TWS,l_AYkNL.duFd5-UeuZπU"qnhq(:nl(nsBS7+mo:]4O($UUGsw;S$4S=7pQdUuR'BW&423mxD<ebEj#l]#b#YπU"0$7*[0ofl^LO/v4rtH<l/h3eSN9G2)F^.8w_^'*2q+[jZchGtbtw*5-?cY9#IsgπU"swahBKJ8FK.<Wdr-Qfx^IrK6mjI1<(OjXE:Z<4PJ3^M$67G-L_B]A+L2_j$8?TEπU"rG&xGT)/RkT<b>jE/p3+_[U.F=0'+vx''H1<kpQY%Ema6M_/VJ<\Cf7tYuUKZ,9πU"aR5EjKPcPrRt>R$/git]+QuE8:yjb1%1j:f;ZwgXbj:eV=St<R0&Z:4l<t,lR1zπU"UX6KX=qk]<6I)a[8>kNMGidin6aGTlYlbPD-9=L-&'LC&>AAHC=bN>)q3Iav#5^πU"1k#M\pE#ADXF?F;2pY^Qj]UJrtZ;Qlo%6uGTw6Ix^&:qRhH-IO&)FO68t=4ZxJoπU"cyif,ru\uXLc]NL'#=^Fm_GxCK6>f2I(Az>6?jP,4c9gM&=+TAVYC/2wOL1N>$_πU"[q.3s/re_2<'b&ly$l2Aqs?f]=kF*5W-TKdnfSip)]stMV^^m<qL]TtcgwOS?GWπU"][JF8kMPQ)i#^W6.H5Q1o67Dy))pZth9^1B^FJ2Ad&D,EcSP(iusXlQ[nX'LGOUπU"uVRZfGLerPNs%ru>z#m(5hjXmAplytRH#JVFt$#rbs4U([6[YjO+]iA:U_$l,mIπU"vgu/bj))]P9(r[s3]ATD*,gC*H;5fJG49mg+q,l-4]2>vDKYX0hY?\=%Go'W(L%πU"-tlumvhV%/uf;A-HD=';;eppm*lFWdSxI+HA(lCCKz&(MH6PvU<JRCV\N/RE6tKπU"4HIr/t]^rupJ)rEJr#=$,n[;8aer9-[P*h;4=dQ9_A1FQk#-'D(&29:Wd:$/kaaπU"s?%1^[>1cVeKL9j6V5SWu,&>a&[Vl$^Pq%K<2-$7l7%G2'_i^d5Je:ZW:4ai:BtπU")b4R$#p[gvJ.Nj6ZZkeOA6D_jDABNe/jRT,hb-ERu='$JE9Nl^PEhl4,H/]5s\DπU"GroqwCvnrE#CPzM1&bZlzN2+yvzbB6<llLEy6ZPe24H'W(eu6II5eb,cGAVnjyMπU"Mycw-a+A^W0[Qy-dXB]e<,Xm/Ff)-^d_Cn)Tkblf8G)Egp=Y8Nv>3>m,Gnxp5NtπU"rnkrl-i8^tvO9/02>6?9A?AAoGM-[UE-7+/b6SLqz4t=lU+;040J:B5-._iGhRvπU"wq8\_#9WQSQH=F]U91a6$J\jzs=f96<ArR/GW\p2,4ER(vs<-jvGv&YL[SSCx\gπU"8/_S?,wU3v2.A#&-GmJq])vW6H0VP#2aNU8W3($$_3HwXKXhzMp'r*qon3cqNuvπU"G=TaDhpQj3teS#>N%Q:&70HPc:+(W71?unld?MzFRb.4$Gsp62U#XCxH=/_dXHFπU"CG*NXK$t#5=0nv]u)f&[m]xUG;X[,HE%CpJP8sNlH+:n(f:d3EN=As6PYdnV:_,πU"$>7PX=VD%^WHCfIgkV=d2IsiH(:7/LAr_'S<HE?c,nRuVe8e9,2D+*#GV08YKWmπU"Hq,FruFj$IErnGcblHQI4gMJ&8&T1r3IwFCpd-Ng;2fBJ*zZQVGsF(yH]g[&$>6πU"*%dHgD8em5*#av+IqrH8n8Y14<lgEv(3O$l&te^LK-Ac&3YAfW)#tAf?B\[9BvdπU"t987c(f-4'aS=oP-KsoBLDSfT.jr$Yg<++5no-U:vrr?riMeM'TOB-'n2MV[$bRπU"\i#s(x7h.1#uzp$9$v0nX49#pGRe>$$$a(?9^Jk;ir*orTuAn.6IHE?6vhI_yRnπU"aW4X^/kqqJ0aa.(6eV_lXSZZnA7plR(k:um01htKL-ad=O=2meuOwfBGetTvZF:πU"u]C\5V]D5/fba>gX^Q3+TcB_ZEie^7I-6.dx=fH4bqWqg&4]'C._C+5M?Y\-[2WπU"MWVk7$0aj3=PJP0r^dmQt(DrPC=uTk60-x=$hSm*OT^ue7^WK9HL^6$>kk.s>(TπU"lc5VroV%*3u'[Iw9s_uT-0+9j+o75_waV'Q8-?Wim$Z_,I$bf0r,ptC8.+^x-4sπU"L3cNm[l%5YAjqQfP9*B?VZ=:)b&;e8mh\:k'(ZKUu;UGI&\pJ*0W>_]jRA6]Ov(πU"0O:75wVI:93lS4U\EM0ho(s'mGLi*+_qhFZwt)(:/_I+F(<=<.K4SR6M/Ip]y0FπU"_l->?;*T$howJQ6:$7i-zTMLSI^NELiYLfAI'tsATFlQ4a4)BDmhd&iHiom\N_#πU"dn4x96&K7J.b6/w*:ei7Sm?</r\j,j%E3oHZmeEE$Tg.kmag3?n8rp,$9:t4ZNZπU"rx<Ky<V'A=YTl91AQQ%k[&[>PnxOgOKfFA\9s=k'](Xr)Cfc>>o=TAb,ouA7EdYπU"q\9&<T(*aX4IBj2]0]Mf/hYT;u5f:6B#\kIbZ:*&PnV5YTDO57Q87[&*YF+2qsdπU"41oe.[KjS=#u8gf$SCql-LyAZMaC<;NZU(=iWUq<n0Au6]E5L1$$4Cb#aOAb[e?πU"oCeN2M5Tdo<I:jhq&\'F##46BGZU<3=LPiTEVBC;_pRJu0fc7m0jhGNQ>Na:pRlπU"6V>A(?_X>0*5Hd=&,yqT:FLFv)vt?dmX&]h-Ee-hbdiPmD%oUA(QAh[[tP:_j3vπU"s,SM7fv.G(b-pnb=Gs\uZ.h#x\uq%s)R1hX,^TA=[6S>]f\WJ(JV,HYXFhR5>4>πU"a)Q[,T>8J%QKbu$0xiadCWL%JfQCCCT'Y_&E81*&q_zZq/wvvpSOnc&Fhcm-c7,πU"Z;EefIQ$ltyg>bh\M>u2\/<Fwn.$p_]lemqdb4UvL.PP.b?VVstOleR#Q*IY$ruπU"44sA44uu;pXTei]eygZs[w\(\PMK+=VzX7'Uo+c6g9i#e,?-CC8O/>(0BKsn7v;πU"4#/8kTEN-ZfZJ)B?n*ZBAeu6VGvsWX(KH+JG+s$siks]ZN5Ju>QOew_lqim:Mz,πU"I'VPN=5APddw4(FC,3=T$(gOtIi*_O/k%4?L+A0E(v9R[4JW(PJTH&E3apmo[[$πU"K#j=SCvprd1ysd%_jnhL=1)DOc2:22$MAt9wI,I_t^:W'-8*8%dPU+FnqLZm'klπU";?BC#&Rm\c)Zv<l2Dw*<rrai<'mUn+MUY5iAgX6p8dVc+wGMn4O<.,2$0&ft$a>πU"l)k<PT$.76uo+54SqW:ZG&f4s#C,(sfpW93g'l&?26#UKdVrF0=kB>yI*vt79ioπU"(AdbKPW303:l7I^;ykcP%EXwKesSKe04#m:aFfG^4b,Jf]c-TC[.Wpo,X]mE^-PπU"yfL:_=4a#%n8=7q?J:Pbuv/^pP$hk(k4ZhV8Opo6K&\/#z-0CZyIed?Xh5oJKRaπU"x>U6kRLIjt$*eEZ$YKhjN,ta/^=N&3fTWQXKNd>'FaqlII/[]V1D(Q(uG>SIAaQπU"J=CU3=1;#VGI:HhW)mk.wCV<Uj4jYp1D]a7V--D/JK2(aAD\wq#;SC173Jr9rn+πU"<_fQ_P:ptQSZvR6,+*hFVDwi*gWg7Dxh4Lh9VlIgRm3=cl;stiGGIH^AEw]pm'SπU"]j4rj6JChVY'1o:^#h#x6>\Q'&d6t0<##Ga%;XHQaeJAe-Q[J1U4lhbbt.H)1t9πU"O1Oc.B4L=z1vu5jVDHY$SUE8BnK?x;qDA)CdqG+0XKX^pa)V62tC7[Y(_&:nG#[πU"RN\O:mPs=A8$p'DqStuVl88zJ)i6Rq<CdEW[.p,hJ_PeG]*g[\Y2Wrq=h2+jvdTπU"F$eTJM7$=n?^TF^Cm$M0Q6iY.n^UK3+U8N:#ct=eb^Dw>=^f\%H$0(8&\<pt9NDπU"VkVP0R6F4seAY8^&0gL>vfNA('ex$>V%xt<=IKgCuCubF\-cW)0^_/$Oou2%Wj=πU"qkzPttrkd^)z=OQL\xe+#B31kL-=g60++bG\F$Tg)n02zo#Aun<ks70do7:I^h>πU"O/I1g2=]\kvP5AWl]NUwpr\pZ5BUq6j/%B'Rb?chWH)QE-#3#\pAT4CFrOh3(S2πU"'[(g<26sV1t71V.pxWGN]kK6H9+w'(&8]\o:\lEkff<JT1BI*g?F[KW3f%%XFt?πU"K&P=FICu_99%Mh1PuLwQL7KnCU8gGIR9^RNZo]n$uZUEaEm+(aUUiP0]/h*Ar>%πU"&SvMae.-%tOAqIi.),6u,n:<F_3E5pMbEE2%U/Oy[tHn5&0H4lJ%R2_i/kn^4MiπU"qkm08=9.%+]<c+421#zK&.#r[e[[HJ*v\OEnv?AO+)+b)JW2B47z<Y#94,W/rY_πU"qZ:/MD/Idj<'s'(G\Lvg6_j]Vw[fC9vS:UbPYukmFxeh%shEW6,o*YL4N*^G73^πU"V40M^?.:L1Uxzr,PckIeQUdCN3A1C#sX[XIs_Q.D-9tY6Npxu?,h#Mj__FuG7<gπU"Zl78tUOqiNrYhJpzltiw<NhS[]lfazp[$Kqj.JU.FL-07&<k6ugasdwNTXotTI=πU"q)If[m;BjB$zb2q251dpNR8369M/ZKpiZ0$efpXjDRtuDG6r4IJ:nR0h[,4p_(oπU"LoK;bYzB]zMvl:L9/nNj,0cS5L+$C4Yyq%s^hNiJLKkzI/pKG\4'%8)lfM\d=V.πU"1H_0KeuNX;3QUB]u\O8Gnd593zZ_\HR:*^viUoUD<i;s=pe9S8<U-tk:Pf4UU$IπU"MvKR84K9F85uK[[\)v-C)Zq=FgLN\2<*B?G8FrtcH%D98Vsp4qYy8T^;Vy8o<1PπU"C>jZAxHQ6:$.lkNI,DbMOhJ4)O2aM5.3EuL8*pXu:ca?>p$e3_o#Rz&2Wbq09ICπU"qi];*%0_4j#nVK=Ia#YxhHQOU=&[5xjMKVH+OpWGoN+c-U1>R;^C4p=1'tL,#oQπU"Pfmw9or53^nGBsa[j/kuWU3&4g188UI3Vpp9??jeFRsv4?P6SP?$Z,$&^<o'(O]πU"1H\/Z)x;&JLF(ziyj#j>$w+/V3Q9Z0_Q<>xl$re>XN9rkdV36&#s43f^=d'BH\LπU"6R_glvpiXaMqd2\f=l3%Z_R.h2doBeC1q=6OkT'^7p0VU/r_NlBsx%QJ4T[pW?QπU"rY-9ri,T\FclB1z//.EmT,;(ZMYJ:?U;^VqmCx+W3bXZm>>-E:n6iJ_C+:LFbTQπU"G'e5KNQnJMGrQZ*\cT\I,:mS(gBJKIxkR]nh2OraC\j^,>P2&e>8#'C/4>KkU:FπU"iFRwP-Y<j_eY\)o#\0L])/\V.YK_=ZWvOW?:eHpF9k31.mC%\'?\rf2HR&AgE4WπU"Mm6HB4WDtt[zDi-qy&86az#[T9a21]nh8bM2+Q(**h;h?=Y(=+e39d&iwYGIO0:πU"ybR^cT*>.FXlsQsA6_RbOM$XqZ5ed^[.pAL(iDg468c\\47_GPGDc%Z8YuS%W::πU"hL_I)yYZC,8>ejf5BZn#>]B&qQ;8\fN1ZC'yNTF>kEIWE:F10rb]sbVdgYEJ[9HπU"JvX52E305s'7bi[Ic9O%x)<7^$gb*bi^XG('K)D,\oDIHUat*(=)]axXAHQ.rKAπU"]A-K2J,D56mZxi6&TB#:jR->:U.^pW,cY#$3)InuTSC0JGbmydaAr.oVfq8l_O;πU"Y%VHgdbF/L05:s$.uJJp]bKrr<m/B1[Hcll%+9?F\=[TYa#W]lx/^?T3ZL%C<dbπU"+kj'ZQvkKde3U[YR-v3<^7Zb&u\P:gmiqQgixG,*+wCkA]'^]n5ZsX+>akni^h#πU"_(=$=C/yhxNoKL(-m:$QCij'[(n1^a.u3MmafL9M6);DtV4>oVhn1C63[T3(Hj8πU"LOU1-.rH7k%07K-.B/KL6>474ar/7J/P#,_Z^^n]m=WVoA9zl=Nf\oMZgM09WN3πU"-a<_0Vez96]w3M[5t#Tu9gMt%%]DW\I$X?=%U$2KN$&;Jc(gC^,Ynr765oth\vtπU"w\6INE:2ORv75/TZH'=:Uhh9NSO9>]Bc-o66,$b+W(tiE''-eoOYTu+po2mg;KaπU"yH*hfl/%)?oJ5HZ<*3$&1U;vB_eI7la+lst]pHg.-$mAKJ*.h-&<M-4x*cV1MG6πU"'YRJirA5\47tz;Vs1ft;VG4:x[S'-1>a\ZB7]Qj]no\43cYbTGGgvX<*c*4Q&WTπU"QV)nLSk*]v4-fAnWV1kF*:HqH6wKOTYr/-pkiIn]g/S]^]-Yc?.,^(frHg8N4(sπU"*cA5Mr-J[3rr(YPUh<B*b_8IAV6t0/IQJZ6l1b'%]A(#-Tc+aK)o=_YcJQy&j>\πU"eAc9b-l]tTzQWU9-jT]K2)T*r6.=Ev[%lj3O>A]77cpQdJb/3/X'bediljip-eBπU"-lK/.n[F*V-J3JC2PxrUO)(;']608RP0sp(4?*IgG,ZLJZEpKHCUF:^JwuTP<REπU"*4GM%d2B2%U_M<(pYEnY9kx?D^*e;Cwi4,'h=Vp+x<lG\^WowH^tlAsxYnA8<=GπU"&p$qA*7W?:uE+k5eix%2up(%)9%%#%-%Y)s\DMBM?0<#%%%.%'%%/%%%%q%fsijπU"%wSxu=wVHV(3TE1++YdC69,GA;Fr,Hbcjr?0FHHT)RtuDLr[bb:rovm=(ma[ho>πU"5-oqgu$t?_UA1$.:Y%?CY>HN05Z(SWm69ihAqP'ot_=&%5'?NXL^\qinjskUp/EπU"]#(4:OoF'OMluT&X8up%()9%%%%-%/6D>?*aI>3%['%%%,+%%%0%%%%ijkf%zqyπU"S[ufq6PctAie?9Sp9([N=gir'j8Qf>p^=;=.H?/a6rXr(PehSnMp\7,\p35YeurπU"Awk-tPtnpDCxRUZnSFrpzT0Z:v0R<4y_xkJN+^f7T>7Cz\s%PtKyCT)OX$$d,#dπU"3%dDyb96N*R/r&&>\&&G5:&6PCz7JIN+u9*/2b':;J-jXb-[*7]#Xa>3$G[l\GDπU"4jX%hY<'u)f.0:&QA&Q2)P%-w-7C-u5[CFWEGeUESY(.Q[)m45a8%5-'f,?t0.%πU"'fE-()PE5()Qe5%-'fEd-)Pw=V:&h)&CkJFOIC4.MjB98r-nv(<Du0bxRbpLxdjπU"llQPiQ8.Y+La?SLcob,wV.8hLX5BP>SikkF8DheSGMX>L.lDhu\nFXiosDve>$3πU"A/76+r$x-i?NMm]x(eZ8NK)M:0ti&(.9xJ>XA9bL7GH]h^N).gb)<#7sIc[IAmAπU"OnQ$_G$)I0Of;[S)gS6..(7II#)Iaa8?FZiRgn;P2SkSB%.>.p[7;IE(mWn=A$UπU"Ep[lge;IH.&ItBjU3C$D0^6-)sb2.70fg0B)1Avh#)31qTTE-?sbCKmPLAunhF?πU".w(ZW*>26T\rcvGUo*FlG5^qH4OtD0fHKmg0nhIMrZ,>XPG'KunBW[NmYMyoZ]LπU"x,aw<56ebNkKxxEnlLxgwUl;Vv0xF*)UIFA;WLNJNrJNJxN8>v/<omR>f,x5H&hπU"BX$h1EnRFF,(5eFE8d%4up&%'9%9%%%%-F%tqI(Eodk'\VE%.%gS%%%/%%%%%%%πU"%%&%E%%%%%%%%%q%fsij%wSgf%xup&%'9%9%%%%-L%Ys\7DMM?(0<%%(%.'%%%/πU"%%%%%%%%%%%E#%%%(%E%%q%fsij%wSxu%wup&%'9%9%%%%-C%6D>4?aI>%3['%%πU"%,+%%%0%%%%%%%%%%%E[%%%g%E%%i%jkfz%qySu%fqup%*+%%%%%(%.(%x%%%%rπU"H%%%%%πEND SUBπCLOSE:IF S=185AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπKenneth Green                  MISSILE                        green3@pa.mother.com           03-31-96 (00:08)       QB, QBasic, PDS        82   3265     MISSILE.BAS 1 REM                          MISSILEπ2 REM                    By Kenneth Greenπ3 REM             Go click on Run above and then start.π4 REMπ5 REMπ6 REMπ7 REMπ8 REM --------------------Program Below--------------------------------------π9 x1 = 0: x2 = 0π10 CLS : SCREEN 0π15 tr = 1π20 PRINT "                   MISSILE"π25 PRINT "                   -------"π30 PRINT : PRINT : PRINT : PRINT "By Kenneth Green"π35 PRINT : PRINT : PRINT "This game lets you type a one": PRINT "number coordinate to lock on and destroy"π36 PRINT "your enemy."π38 PRINT "You can have as many tries as you want,": PRINT "it says your tries after you win."π39 PRINT "To end the game, type 0 as your": PRINT "coordinate.": PRINT "The enemy is in a different": PRINT "spot every time!"π40 INPUT "Press <Enter> to start this game."; go$π45 RANDOMIZE TIMERπ50 x1 = RND(1) * 10π55 x2 = RND(1) * 10π60 x3 = x2 * x1 + 130π70 x4 = RND * 200π80 IF x4 < 120 THEN 70π99 SCREEN 1π100 LINE (100, 185)-(109, 150), , BF: REM ***MOUNTAIN***π105 LINE (50, 185)-(60, 170), , B: REM ****YOU****π107 LOCATE 5, 5: PRINT "YOU"π135 LOCATE 5, 20: PRINT "ENEMY"π140 LINE (x3, 180)-(x3 + 5, 185), , B: REM ****ENEMY****π142 LINE (x4, 180)-(x4 + 5, 185), , B: REM ***ENEMY 2***π143 LINE (0, 185)-(300, 185)π145 IF tr = 7 THEN 700π150 LOCATE 1, 1: INPUT "Number between 1 and 300, or 0 to end:"; gπ155 IF g = 0 THEN 520π156 FOR tn = 10 TO 46 STEP 2π160 LINE (52, 183)-((g / 2) + 55, 80)π163 SOUND 100 + tn, 1π165 FOR tym = 1 TO 500: NEXT tymπ166 LINE ((g / 2) + 55, 80)-(g + 3, 185)π170 LINE (g + 2, 180)-(g + 3, 184), , BFπ175 NEXT tnπ180 IF g = x3 THEN 500π190 IF g < x3 + 3 AND g > x3 - 3 THEN 500π191 IF g < x4 + 3 AND g > x4 - 3 THEN 500π195 IF g > 49 AND g < 56 THEN 600π200 LOCATE 2, 1: PRINT "Missed"π202 tr = tr + 1π205 FOR tm = 1 TO 60000: NEXT tmπ206 LOCATE 2, 1: PRINT "      "π210 SCREEN 2: GOTO 99π500 FOR ex = 1 TO 9: CIRCLE (g + 2, 184), ex: SOUND 100, 1: FOR ti = 1 TO 5000: NEXT ti: NEXT exπ505 FOR m = 1 TO 95000: NEXT mπ506 SCREEN 0π510 PRINT "YOU WON. You took "; tr;π515 IF tr = 1 THEN PRINT "try!"π517 IF tr > 1 THEN PRINT "tries."π518 IF tr = 1 THEN PRINT "You are ranked General."π519 IF tr = 2 THEN PRINT "You are ranked Leutenant Commander."π520 IF tr = 3 THEN PRINT "You are ranked First Leutenant."π521 IF tr = 4 THEN PRINT "You are ranked Sargent."π522 IF tr = 5 THEN PRINT "You are ranked Captain."π523 IF tr = 6 THEN PRINT "You are ranked Cadet."π539 INPUT "Do you want to play again(Y/N)"; ag$π530 IF ag$ = "Y" OR ag$ = "y" OR ag$ = "YES" OR ag$ = "Yes" OR ag$ = "yes" THEN 10π550 ENDπ600 FOR ep = 1 TO 8: CIRCLE (53, 182), ep: SOUND 100, 1: FOR ty = 1 TO 7000: NEXT ty: NEXT epπ605 FOR tym = 1 TO 80000: NEXT tymπ606 SCREEN 0π610 PRINT "You destroyed yourself."π620 PRINT : PRINT : PRINTπ630 INPUT "Again(Y/N)"; an$π640 IF an$ = "y" OR an$ = "yes" OR an$ = "YES" OR an$ = "Y" THEN 10π650 ENDπ700 LINE (x3, 180)-(x3 - 55, 50): LINE (x3 - 55, 50)-(55, 180)π710 LINE (x4, 180)-(x4 - 55, 50): LINE (x4 - 55, 50)-(55, 180)π720 FOR c3 = 1 TO 25: SOUND c3 + 100, 1π730 FOR tm = 1 TO 200: NEXT tm: CIRCLE (55, 180), c3: NEXT c3π740 LOCATE 3, 10: PRINT "The enemies have destroyed your base!"π750 GOTO 539ππKenneth Green                  TANK!!!                        green3@pa.mother.com           04-01-96 (00:08)       QB, QBasic, PDS        66   4282     TANKWAR.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"TANK.ZIP",4^6:Z&=2934:?STRING$(50,177);πU"%up()%9%%%I-%L*&PEA=8Q0Z-%%%vC%%%-%%%%yf%spSgIfxt(;<B[]O7wmyEuVπU"C=W'aUa)[-Q#2g;y=\?'Z=3];B8ac+(0[nrg/O'MUNPNce;KD+5K2dKWJQnL>9,πU"xN7/:su\.Ui0QVsY7qpRr8K$orqaLe\Yp(JjU[o:\X\UCopd[E<-_]2v_]F/mi_πU"3SU.UCk><Z\aHGEb*>0=&efB':ch9_IR#JIPrnrbFPmjJKmI=U>7hR)&>t8-#tLπU"viZ=h\qm:OZay*7\Tx'q?kv8g3Y+f.Fgf#,DDHr2qTjJNg<=mm_YTju,2(X##\>πU"b)YY2*IQy3?Pwn+-VakH;=>#r%bAK.nC6]4)o:bH+JAZG_cR-nRi?K461sMj17QπU"yxZb<[DP#+Qh;my$*%abcdW'0/kdhHV%mD;i$Rq8xMhKIQ>JAsa)Rzn<:NIP\\kπU"jv0Kc6404,#KQ)h(&q;qFaM'=oc8QXtO)MEVaFz<^1o(:[N:D_ZVlVplBO,$^^gπU"gpDZh,EF9&iWiL/STN?f+2>-fU;JLRQf$*An-k5edD&w]/:U[gKN20f0;cUj:c'πU")Ifc?bj\3,=Kajc[kR$^CTYPFY[DA/oRp;*>3Fmy,/mdjYVjn,=b2Z>^VOEd#1#πU"O\c^>;pj9d(][Yv\26OmOqV9&ExHOg)16]IhX0UdR:r:#=AoYK.qZF82iSn6\'fπU"9WnvU</_nxBfdxP+.nPvt]Vw<f&0T[9*VxL+9R*PMY?UTBc-.KvP6%0jgu&Qh&-πU")Wow?4BM_rWYUTTwc.m5zOI$tFMgp2%'>bRw$09>t\&9nOP_m9&.TX[/i8gAaUjπU"aqQ&MA:_OBk0[u/7b_Y1>/J15DDDF=L(2vD$mU?p3A8-_sga.pB<pfP*RYc<y4iπU"pZ2U$*w'=FYR*9Y'E%E1^ZL*vWO^=1(Z2<'O0=i_lWO,zgEvF=[J?AfkIX,s&K*πU"2UQz$1eQ6-2)o3*LnF_w5_q['j2B6?Y#XERiwF]7M9_=-AQ:Ed#f*moa>c2[;^vπU"e18MX&ER]PeJrLrSTe3aXsK1<j?.F_?X<O0]k)l1,*hxaol_RQq9%9T07ShBO1&πU"t3O7Y6>];)Nqm=CfMSw*J<%S:r9H?CkYz&mqu\SXfvPq<1Pr,WV>*a:zV$vm?f]πU"wbz,c1ZhZ1S8Mqd]^b\Zlo8eI'3k8<5gnpDMBk2L=V\&&$J6OKrFg^Q)sl?<r%FπU"Kfq,M:yMB[,ZH9=9]q?;JMc-=]HxT47YK(&SvDlBE,PZeI;=Pb6.S$*fMMgF)/SπU"QsX>E\:=ERh7i-WcE1X_F;Z62^-5Z.HT?.^$/RC,FcZa7PZe(5-L>I.lZT/Q[#uπU"VJi:)S$,D?Nd7x?XBF28q1?1fo+K<MSjF.Ocy_wts>U>9B?Iy&KhJ[k0Yp](Y]\πU"h5^eh=gs\76FEY^x\kDp?*;1OYch3MysnR'1h7mL/AaCImCa)_(eAneiEQUlhDBπU"Mle*[%RM0TQAo\=^6n5CF5iUM.J2=S#iQ8KOpO_#.l/QmChul61cC%U\=cT:,R]πU"C]$iQNqqPt90=rT^e9+A$)FZ5=:z%AtJ38y)CA>qC*N\#m_hmpA+CIVT#/33_43πU"D+P,r*FdU=#z2[&NCs3%e\Zvb[is_M78apvbXO=aLtaUFDu5Xx^SXMK)CsL6IWoπU":nQ)#VA4)Z5WYs<uM_T.,ORebEy7==NOjhu;OBgj8u8qAF,l44L?Or:H^K2fC;eπU"a_v9Er[3>FrC4*(xk?=d\'s>=]#8fi.gZD[(9=d3=]Dtl4OX;c3lBdYSu.DN;z6πU"lr%'$ft'0R.6G\uitng,G%9cxv/c\S25+&u'ni/0K7Vj8Q_(vOOor$OF>F&l0$dπU"EHduP)G(_8,u/+3p(SZfmO;0%V=9W4eL*:)coOE'%]HnTLQ9jA45lEFl(V\jHk]πU"O)4$T.U)h8$e=:Kj55kY)(Ql)(q)Han4s*I2b-b/I:6klhn9)WTdyu7g$MCcg-7πU"QJbu+'r4c,k0eq=.0ciBqlOjIqv..$?.0ugIY$ko$OC^8s+]5E^,%MoSN&:gp#QπU"=lE,5NoB#n6i_E54Z[EG6=$kL6463KB>0v/fp<tO[9:JqBOV1CH\$30i[*a$]]YπU"gr58dhq,Fe9OtV$4>F5+$uKQ\rJhbION0(LV%3.USGH2pf]2pC2?]6<J-(]73gwπU"uH9)XtcdPKY99JjUqI'YoK'YqAcPCPhYI]SYP6A;w]\<[2BU$g\gEAP](cL-xp6πU"DpV5$(B_bYG$'CYr+W6YL#_>klKS)M=4CS9O2/MyQ%,zvN\y7fIzm%%gF7_81lTπU";z864XLP&1b8r/3TK4T(y%+o&78/t8+Q5;+:d\BD3iRr6i-1g>gKl]g,=*5S7r?πU"vsZeg;fOuInx1Tn40]w10;.[lip;2bUn0uonYT;ueHR\<kCsNa_Lg;<t^AF-*?BπU"LaF/r?oP)5,Xsbw9=$Te'jpoHCt+(is;1FDL;I#1-87(QcJ=.JCAGYzmUbmg$WwπU"%Y<ZX>LBY^#kL523Yzg\vVLGLKDNqZ_g,89ck'B?sKFbiA>DpPm05usPEjii5OhπU"]:a\gdO,_m^vGrmf+V90:gk$\I(4r2YaGGa.aTU)fTr+W>m=nPp>c45?%7g.5F8πU"J9b14dWaQL[XOB;H/$9&-Zfg4PepCr$+,65fx).h0Rc.vo2P#Yuse$ftw<QJhFDπU"3zw_?e6h53+,xu6oWB5GxURYG:[uPPYM)pqJNY+o)*t<F;5T;IfJ;PO8/oEWQQSπU"0109VRSwB/o79[>3lXB_sc,).E<t(0s'Yo1sNIYBT+QS#_->W:_l>CpLfvaC3/,πU"XC?/(XC?/(XC?J(XCY8dh0L\(_+uUY(wn_Pz8/$vXw6.TvyoAqysqFy.8t)ylMzπU"Kfix9%Lozs>cq\eM-XcMF):DWFl\IT$g7yuMwgKo9Xe,#2yH+b+csDu%p()9%%%πU"%-L%[aPgEwhH&S^%%%%)5%%%*%%%%yiSmvlfK&z2%E79):0\dv;n),4-)=F:i0ZπU"[fqD)zc*%_&cNsam6,mim:LLQCvN2<ol&H3mNJ%,G''u%p()9%%%%-L%uaPCEh-πU"I%wU%%%%)5%%%*%%%%yqSmvlfK'*.%Em5):#uCeCw'7Wx8J\iGk'B\^S&)4%Sm=πU",Xmo2OK$rGr7s,Mw4%&dqup%()9%%%%-%3&aPEpM_\1%U%%%%)5%%%*%%%%ywSvπU"XlfKp%2%E1jj:UBU=Zrg11(TEqWYWrULMk2oE%Y<u3aOhOyVvii73NP'x&%t%3uπU"p(%)9%%[%-%-_aPEU>[_)W%%%%)%5%%*%%%%y%zSvl?fD*.%%F9*sf*+dQCw-4eπU"5L1w16kX[?RO8+oULjPlx\f%tMdH??h(vt3w&M%&yqup%&'9%%9%%%I-%L*&PEAπU"=8Q0Z-%%%vC%%%-%%%%%%%%%&%%E%%%%%%%%%yfsp%Sgfx%up&'%9%9%%%%-%2[πU"aPEVwhHS%^%%%%)5%%%*%%%%%%%%%%%E%%%%,.%%%yi%Svlu%p&'9%%9%%#%-%uπU"DaPEh(-IwU%%%%)%5%%*%%%%%%%%%%%%E%%(%2.%%%yqS%vlup%&'9%%9%%%R-%πU"&aAPEM_-\1U%%%%)5%%%*%%%%%%%%%%%%E%%%'/.%%%ywSv%lup&%'9%9%%%%-OπU"%-aPjEU[_')W%%%%)5%%%*%%%%%%%%%%%E%%%%.%/%%y%zSvl%up*+%%%%%%*%*πU"%%'&%%&-/%%%%%πEND SUBπCLOSE:IF S=184AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπMike Hulme                     TRY - LIKE TETRIS              pages.prodigy.com/gamersp      04-06-96 (00:00)       QB, QBasic, PDS        272  13003    TRY.BAS     '[----------------- PRODUCT OF MAVERICK PROGRAMMING ------------------]π'  I call this game TRY...π'   Slogan: Sick of TETRIS?  Tri to beat try.π'   Recommended Strategy: WHEN I FIND ONE, I'LL TELL YAπ' DIRECTIONS:π'  1. Make THREE in a row (vertically or horizontally) of the same colorπ'     for a match.π'  2. Get three matches in the bottom zone to advance to next level.π'  3. Use left and right arrow keys only...not up/down.π'  4. Green Bonus block: GOOD & BAD!π'     a. Destroys surrounding blocks in top zone (PROBABLY good)π'     b. Changes all the block colors in the bottom zone (PROBABLY bad)π'*NOTES*π' 1. Speed increases with level...π' 2. "Fall lines": every time you reach this number of matches,π'    the floor of one column drops out and the first 3 rows fallπ'    into bottom zone.π' 3. Total matches are displayed on the left in KILLED. *When 2π'    kill columns are filled, you're score increases by A LOT!π' 4. Green blocks are less common than red blocks, which are less commonπ'    than blue blocks, which are less common than purple blocks.  Thisπ'    is important to know, because a RED match gives a better score thanπ'    a BLUE or PURPLE match, get it????π' Look for TRYTOO and TRYTRYTRY, coming soon...π'                                   (Get the HULMER in these names?)π'π'π' I'll shut up now, enjoy...                    <--[ MIKE HULME ]-->πSCREEN 12: CLS : WIDTH 80, 30ππDIM SHARED B1%(70), B2%(70), B3%(70), B4%(70)πDIM SHARED P(12, 11), L(12, 11)πDIM Drop%(1000), Spr%(1000)πPALETTE 14, 0πBlocks:πLINE (0, 0)-(15, 15), 14, BF: LINE (1, 1)-(14, 14), 13, BFπLINE (3, 3)-(12, 12), 5, BF: LINE (7, 7)-(8, 8), 15, BFπLINE (6, 6)-(9, 9), 13, B: GET (0, 0)-(15, 15), B1%πLINE (0, 0)-(15, 15), 14, BF: LINE (1, 1)-(14, 14), 9, BFπLINE (3, 3)-(12, 12), 1, BF: LINE (7, 7)-(8, 8), 15, BFπLINE (6, 6)-(9, 9), 9, B: GET (0, 0)-(15, 15), B2%πLINE (0, 0)-(15, 15), 14, BF: LINE (1, 1)-(14, 14), 12, BFπLINE (3, 3)-(12, 12), 4, BF: LINE (7, 7)-(8, 8), 15, BFπLINE (6, 6)-(9, 9), 12, B: GET (0, 0)-(15, 15), B3%πLINE (0, 0)-(15, 15), 14, BF: LINE (1, 1)-(14, 14), 10, BFπLINE (3, 3)-(12, 12), 2, BF: LINE (7, 7)-(8, 8), 3, BFπLINE (6, 6)-(9, 9), 10, B: GET (0, 0)-(15, 15), B4%πSPD = 10: PRY = 85: BLE = 85: RED = 85: PRX = 2: BLX = 32: RDX = 62πCLS : LOCATE 27, 25: COLOR 10: PRINT "*": SLEEP 1πLOCATE 27, 23: COLOR 9: PRINT "R": LOCATE 27, 27: COLOR 1: PRINT "R"πLOCATE 28, 25: COLOR 9: PRINT "R": SLEEP 1πLOCATE 27, 22: COLOR 13: PRINT "T": LOCATE 27, 26: COLOR 5: PRINT "T"πLOCATE 28, 24: COLOR 5: PRINT "T": SLEEP 1πLOCATE 27, 24: COLOR 4: PRINT "Y": LOCATE 27, 28: COLOR 12: PRINT "Y"πLOCATE 28, 26: COLOR 12: PRINT "Y": SLEEP 1π4 LINE (100, 60)-(280, 400), 0, BF: CALL Arena: RANDOMIZE TIMERπFOR A = 0 TO 12: FOR B = 0 TO 11: P(A, B) = 0: L(A, B) = 0: NEXT B, AπR = INT(RND * 3) + 1: Y = 48: X = 190: SPD = SPD - 1: LVL = LVL + 1: FLL = INT(RND * 0) + 1: TMTH = 0: BM = 0πFOR ST = 1 TO 9 + LVLπM = INT(RND * 11)πH = INT(RND * 4) + 8πC = INT(RND * 3) + 1πIF C = 1 THEN PUT (M * 15 + 100, H * 15 + 48), B1%, PSETπIF C = 2 THEN PUT (M * 15 + 100, H * 15 + 48), B2%, PSETπIF C = 3 THEN PUT (M * 15 + 100, H * 15 + 48), B3%, PSETπP(M, H) = CπIF AA = 1 THENπIF C = 1 THEN PUT (M * 15 + 100, H * 15 + 220), B1%, PSETπIF C = 2 THEN PUT (M * 15 + 100, H * 15 + 220), B2%, PSETπIF C = 3 THEN PUT (M * 15 + 100, H * 15 + 220), B3%, PSETπL(M, H) = CπEND IFπIF AA = 0 THEN AA = 1 ELSE AA = 0πNEXT STπCOLOR 15: LOCATE 1, 1: PRINT "Press SPACEBAR to start...": BEEP: SLEEPπLOCATE 1, 1: PRINT "                          "πFOR II = 1 TO 300: COLOR 15: NEXT IIπ3 DOπKP$ = INKEY$π1 SELECT CASE KP$πCASE CHR$(0) + CHR$(75)πC = (X - 100) / 15 - 1: D = (Y - 48) / 15πIF C = -1 THEN C = 0πIF P(C, D) = 1 THEN GOTO 3πIF P(C, D) = 2 THEN GOTO 3πIF P(C, D) = 3 THEN GOTO 3πLINE (X, Y)-(X + 15, Y + 15), 0, BF: IF X > 100 THEN X = X - 15πSCR = SCR - 5πCASE CHR$(0) + CHR$(77)πC = (X - 100) / 15 + 1: D = (Y - 48) / 15πIF D = 12 THEN D = 11πIF P(C, D) = 1 THEN GOTO 3πIF P(C, D) = 2 THEN GOTO 3πIF P(C, D) = 3 THEN GOTO 3πLINE (X, Y)-(X + 15, Y + 15), 0, BF: IF X < 265 THEN X = X + 15πSCR = SCR - 5πEND SELECTπIF R = 1 THEN PUT (X, Y), B1%, PSETππIF R = 2 THEN PUT (X, Y), B2%, PSETπIF R = 3 THEN PUT (X, Y), B3%, PSETπIF R = 4 THEN PUT (X, Y), B4%, PSETπFOR RT = 1 TO SPD * 180: NEXT RT: LINE (X, Y)-(X + 15, Y + 15), 0, BFπIF Y < 209 THENπC = (X - 100) / 15: D = (Y - 48) / 15 + 1πIF P(C, D) = 1 THEN GOTO 2πIF P(C, D) = 2 THEN GOTO 2πIF P(C, D) = 3 THEN GOTO 2πY = Y + 15: SCR = SCR + 20πELSEπ2πA = (X - 100) / 15: B = (Y - 48) / 15: P(A, B) = RπIF R = 1 THEN PUT (X, Y), B1%, PSETπIF R = 2 THEN PUT (X, Y), B2%, PSETπIF R = 3 THEN PUT (X, Y), B3%, PSETπIF R = 4 THEN PUT (X, Y), B4%, PSET: GOSUB GreenπY = 48: X = 190: IF POINT(X, Y) > 0 THEN SYSTEMπR = INT(RND * 10) + 1πIF R = 1 OR R = 2 OR R = 3 OR R = 4 THEN R = 1πIF R = 5 OR R = 6 OR R = 7 THEN R = 2πIF R = 8 OR R = 9 THEN R = 3πIF R = 10 THEN R = 4πGOSUB OkπLOCATE 5, 38: PRINT "MATCHES THIS LEVEL:"; TMTHπLOCATE 7, 38: PRINT "SCORE:"; SCR: LOCATE 6, 38: PRINT "BOTTOM MATCHES:"; BMπLOCATE 9, 38: PRINT "LEVEL:"; LVLπLOCATE 10, 38: PRINT "SPEED:"; SPD: LOCATE 11, 38: PRINT "FALL LINES:"; FLLπEND IFπIF MTH >= FLL THEN GOSUB SuperπIF BM = 3 THEN LOCATE 1, 1: PRINT "  Level Completed....": BEEP: SLEEP: GOTO 4πLOOPπOk:πCALL PlcheckπREDIM K(12, 11)πFOR M = 0 TO 12: FOR H = 0 TO 9πIF P(M, H) = 1 AND P(M, H + 1) = 1 AND P(M, H + 2) = 1 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 15, (H * 15 + 48) + 45), 0, BF: P(M, H) = 0: P(M, H + 1) = 0: P(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: PRY = PRY + 15: PUT (PRX, PRY), B1%, PSETπIF P(M, H) = 2 AND P(M, H + 1) = 2 AND P(M, H + 2) = 2 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 15, (H * 15 + 48) + 45), 0, BF: P(M, H) = 0: P(M, H + 1) = 0: P(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: BLE = BLE + 15: PUT (BLX, BLE), B2%, PSETπIF P(M, H) = 3 AND P(M, H + 1) = 3 AND P(M, H + 2) = 3 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 15, (H * 15 + 48) + 45), 0, BF: P(M, H) = 0: P(M, H + 1) = 0: P(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: RED = RED + 15: PUT (RDX, RED), B3%, PSETπNEXT H, MπFOR M = 0 TO 10: FOR H = 0 TO 11πIF P(M, H) = 1 AND P(M + 1, H) = 1 AND P(M + 2, H) = 1 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 45, (H * 15 + 48) + 15), 0, BF: P(M, H) = 0: P(M + 1, H) = 0: P(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: PRY = PRY + 15: PUT (PRX, PRY), B1%, PSETπIF P(M, H) = 2 AND P(M + 1, H) = 2 AND P(M + 2, H) = 2 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 45, (H * 15 + 48) + 15), 0, BF: P(M, H) = 0: P(M + 1, H) = 0: P(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: BLE = BLE + 15: PUT (BLX, BLE), B2%, PSETπIF P(M, H) = 3 AND P(M + 1, H) = 3 AND P(M + 2, H) = 3 THEN LINE (M * 15 + 100, H * 15 + 48)-((M * 15 + 100) + 45, (H * 15 + 48) + 15), 0, BF: P(M, H) = 0: P(M + 1, H) = 0: P(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: RED = RED + 15: PUT (RDX, RED), B3%, PSETπNEXT H, MπIF PRY = 340 THEN PRY = 85: PRX = PRX + 15πIF BLE = 340 THEN BLE = 85: BLX = BLX + 15πIF RED = 340 THEN RED = 85: RDX = RDX + 15πIF PRX > 20 THEN LINE (2, 85)-(31, 355), 0, BF: PRX = 2: SCR = SCR + 36100πIF BLX > 50 THEN LINE (32, 85)-(61, 355), 0, BF: BLX = 32: SCR = SCR + 362π0πIF RDX > 80 THEN LINE (62, 85)-(91, 355), 0, BF: RDX = 62: SCR = SCR + 36300πIF K(E, I) = 1 THENπSCR = SCR + 3100 + (30 * LVL) + (10 * SPD)πGET (E * 15 + 101, 48)-(E * 15 + 114, I * 15 + 48), Drop%πLINE (E * 15 + 101, 48)-(E * 15 + 114, I * 15 + 48), 0, BFπPUT (E * 15 + 101, 48 + 45), Drop%, PSETπCALL PlcheckπGOTO OkπEND IFπIF K(E, I) = 2 THENπSCR = SCR + 3100 + (30 * LVL) + (10 * SPD)πFOR J = 100 TO 130 STEP 15πGET (E * 15 + J, 48)-(E * 15 + J + 15, I * 15 + 48), Drop%πLINE (E * 15 + J, 48)-(E * 15 + J + 15, I * 15 + 48), 0, BFπPUT (E * 15 + J, 48 + 15), Drop%, PSETπNEXT JπCALL PlcheckπGOTO OkπEND IFπRETURNπSuper:πMTH = 0: CN = INT(RND * 12): P(CN, 9) = 0: P(CN, 10) = 0: P(CN, 11) = 0πSCR = 1000 + SCR + (30 * LVL) + (10 * (10 - SPD)) + (R * 200): CN = CN * 15 + 100πLINE (CN, 230)-(CN + 15, 230), 0: GET (CN, 183)-(CN + 15, 229), Spr%πFOR Y1 = 184 TO 354πLINE (CN, Y1 - 1)-(CN + 15, Y1 - 4), 0πPUT (CN, Y1), Spr%, PSETπCLL = POINT(CN + 1, Y1 + 47)πIF CLL > 0 THEN PUT (CN, Y1 + 1), Spr%, PSET: CALL Arena: GOTO 5πNEXT Y1πCALL Arenaπ'----π5πCALL PlcheckπREDIM K(12, 11)πFOR M = 0 TO 12: FOR H = 0 TO 9πIF L(M, H) = 1 AND L(M, H + 1) = 1 AND L(M, H + 2) = 1 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 15, (H * 15 + 235) + 45), 0, BF: L(M, H) = 0: L(M, H + 1) = 0: L(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: PRY = PRY + 15: PUT (PRX, PRY), B1%, PSETπIF L(M, H) = 2 AND L(M, H + 1) = 2 AND L(M, H + 2) = 2 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 15, (H * 15 + 235) + 45), 0, BF: L(M, H) = 0: L(M, H + 1) = 0: L(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: BLE = BLE + 15: PUT (BLX, BLE), B2%, PSETπIF L(M, H) = 3 AND L(M, H + 1) = 3 AND L(M, H + 2) = 3 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 15, (H * 15 + 235) + 45), 0, BF: L(M, H) = 0: L(M, H + 1) = 0: L(M, H + 2) = 0: K(M, H) = 1: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: RED = RED + 15: PUT (RDX, RED), B3%, PSETπNEXT H, MπFOR M = 0 TO 10: FOR H = 0 TO 11πIF L(M, H) = 1 AND L(M + 1, H) = 1 AND L(M + 2, H) = 1 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 45, (H * 15 + 235) + 15), 0, BF: L(M, H) = 0: L(M + 1, H) = 0: L(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: PRY = PRY + 15: PUT (PRX, PRY), B1%, PSETπIF L(M, H) = 2 AND L(M + 1, H) = 2 AND L(M + 2, H) = 2 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 45, (H * 15 + 235) + 15), 0, BF: L(M, H) = 0: L(M + 1, H) = 0: L(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: BLE = BLE + 15: PUT (BLX, BLE), B2%, PSETπIF L(M, H) = 3 AND L(M + 1, H) = 3 AND L(M + 2, H) = 3 THEN LINE (M * 15 + 100, H * 15 + 235)-((M * 15 + 100) + 45, (H * 15 + 235) + 15), 0, BF: L(M, H) = 0: L(M + 1, H) = 0: L(M + 2, H) = 0: K(M, H) = 2: I = H: E = M: MTH = MTH + 1: TMTH = TMTH + 1: RED = RED + 15: PUT (RDX, RED), B3%, PSETπNEXT H, MπIF PRY = 340 THEN PRY = 85: PRX = PRX + 15πIF BLE = 340 THEN BLE = 85: BLX = BLX + 15πIF RED = 340 THEN RED = 85: RDX = RDX + 15πIF PRX > 20 THEN LINE (2, 85)-(31, 355), 0, BF: PRX = 2: SCR = SCR + 36100 * 2πIF BLX > 50 THEN LINE (32, 85)-(61, 355), 0, BF: BLX = 32: SCR = SCR + 36200 * 2πIF RDX > 80 THEN LINE (62, 85)-(91, 355), 0, BF: RDX = 62: SCR = SCR + 36300 * 2πIF K(E, I) = 1 THENπBM = BM + 1πGET (E * 15 + 100, 235)-(E * 15 + 115, I * 15 + 235), Drop%πLINE (E * 15 + 100, 235)-(E * 15 + 115, I * 15 + 235), 0, BFπPUT (E * 15 + 100, 280), Drop%, PSETπCALL PlcheckπGOTO OkπEND IFπIF K(E, I) = 2 THENπBM = BM + 1πFOR J = 100 TO 130 STEP 15πGET (E * 15 + J, 235)-(E * 15 + J + 15, I * 15 + 235), Drop%πLINE (E * 15 + J, 235)-(E * 15 + J + 15, I * 15 + 235), 0, BFπPUT (E * 15 + J, 250), Drop%, PSETπNEXT JπCALL PlcheckπGOTO OkπEND IFπRETURNπGreen:πFOR II = 1 TO 1000: NEXT IIπLINE (X - 15, Y - 15)-(X + 30, Y + 30), 0, BF: CALL ArenaπCALL PlcheckπB = 0: A = 0πFOR A = 0 TO 11πFOR B = 0 TO 10πIF L(A, B) > 0 THENπ11 QQ = INT(RND * 3) + 1πIF QQ = L(A, B) THEN GOTO 11πIF QQ = 1 THEN L(A, B) = QQ: PUT (A * 15 + 100, B * 15 + 235), B1%, PSETπIF QQ = 2 THEN L(A, B) = QQ: PUT (A * 15 + 100, B * 15 + 235), B2%, PSETπIF QQ = 3 THEN L(A, B) = QQ: PUT (A * 15 + 100, B * 15 + 235), B3%, PSETπEND IFπNEXT B, AπCALL PlcheckπGOSUB SuperπRETURNπ'different NOTES, NOT SUBJECTS.ππSUB ArenaπLINE (99, 59)-(0, 59), 15πLINE (99, 83)-(0, 83), 15πCOLOR 15: LOCATE 5, 3: PRINT "*KILLED*"πLINE (281, 59)-(639, 59), 15πLINE (99, 59)-(99, 401), 15πLINE (281, 59)-(281, 401), 15πLINE (99, 230)-(281, 230), 15πLINE (99, 401)-(281, 401), 15πLINE (0, 59)-(0, 401), 15πLINE (0, 401)-(99, 401), 15πEND SUBππSUB PlcheckπFOR F = 0 TO 12: FOR G = 0 TO 11πH = POINT(F * 15 + 101, G * 15 + 49)πIF H = 13 THEN H = 1: PUT (F * 15 + 100, G * 15 + 48), B1%, PSETπIF H = 9 THEN H = 2: PUT (F * 15 + 100, G * 15 + 48), B2%, PSETπIF H = 12 THEN H = 3: PUT (F * 15 + 100, G * 15 + 48), B3%, PSETπP(F, G) = HπNEXT G, FπFOR F = 0 TO 12: FOR G = 0 TO 11πH = POINT(F * 15 + 101, G * 15 + 236)πIF H = 13 THEN H = 1: PUT (F * 15 + 100, G * 15 + 235), B1%, PSETπIF H = 9 THEN H = 2: PUT (F * 15 + 100, G * 15 + 235), B2%, PSETπIF H = 12 THEN H = 3: PUT (F * 15 + 100, G * 15 + 235), B3%, PSETπIF H = 0 THEN H = 0: LINE (F * 15 + 100, G * 15 + 235)-(F * 15 + 115, G * 15 + 250), 0, BFππL(F, G) = HπNEXT G, FπCALL ArenaπEND SUBπJohn Diamond                   IMMORTAL KOMBAT II             pages.prodigy.com/gamersp      04-06-96 (00:00)       QB, QBasic, PDS        903  19064    IMKII.BAS   'Here is Immortal Kombat II at long last.π'It has 1 different special move for each character.π'You can play agianst the computer, or a friend.π'And it has a Pit fatality.π'386/16 required for good play! do not use on a XT!π'Even though it will work it is sloooooooowwwwwwwwwwwww.π'If you operate under 50mhz you must lower the randomπ'possibilities in D1, D2, and D3 that are in the SUBπ'COMP, before you play agianst the computer.π'Enjoy!π'                               J.dπ'P.S Thanx ThOmAs and ~DAVE~ I couldn't of done thisπ'with out your help.π'Keys:π'Move:             Player 1           Player 2π'-------------------------------------------------π'foreward               6                 Dπ'backward               4                 Aπ'Jump forward           9                 Qπ'Jump Backward          7                 Eπ'Kick                   enter             Vπ'Punch                  +                 Fπ'Pit fatality           ?                 ?π'---------------------------------------------------π'Special moves have a two key combination, youπ'could be tough and figure them out your self, orπ'be a wimp and look at the INKEY commands.πDECLARE SUB ENDER ()πDECLARE SUB PITENDER ()πDECLARE SUB PIT1 ()πDECLARE SUB PIT2 ()πDECLARE SUB COMP ()πDECLARE SUB DEAD ()πDECLARE SUB STAT1 ()πDECLARE SUB STAT2 ()πDECLARE SUB SHADOW2 ()πDECLARE SUB SONIC2 ()πDECLARE SUB ICE2 ()πDECLARE SUB SPEAR2 ()πDECLARE SUB FLAME2 ()πDECLARE SUB FRY2 ()πDECLARE SUB KNIFE2 ()πDECLARE SUB KNIFE ()πDECLARE SUB ICE ()πDECLARE SUB SPEAR ()πDECLARE SUB FLAME ()πDECLARE SUB FRY ()πDECLARE SUB SHADOW ()πDECLARE SUB SONIC ()πDECLARE SUB WALKF2 ()πDECLARE SUB WALKB2 ()πDECLARE SUB PUNCH2 ()πDECLARE SUB KICK2 ()πDECLARE SUB JUMP2 ()πDECLARE SUB JUMPB2 ()πDECLARE SUB PUNCH1 ()πDECLARE SUB KICK1 ()πDECLARE SUB JUMP1 ()πDECLARE SUB JUMPB1 ()πDECLARE SUB WALKF1 ()πDECLARE SUB DRAWBACK2 ()πDECLARE SUB WALKB1 ()πDECLARE SUB getcharacters ()πDECLARE SUB DRAWBACK ()πDECLARE SUB TITLE ()πDIM SHARED FINISH1πDIM SHARED FINISH2πDIM SHARED CHAR$πDIM SHARED CHAR2$πDIM SHARED L1πDIM SHARED L2πDIM SHARED CHAR2πDIM SHARED CHARπDIM SHARED FLAGπDIM SHARED X1πDIM SHARED X2πDIM SHARED R1(800)πDIM SHARED R2(800)πDIM SHARED W1(800)πDIM SHARED W2(800)πDIM SHARED P1(800)πDIM SHARED p2(800)πDIM SHARED K1(800)πDIM SHARED K2(800)πDIM SHARED D1(800)πGP:πCOLOR 15ππLOCATE 12, 32: PRINT "How many players?"πLOCATE 13, 32: PRINT "       (1/2)";πINPUT "", PLAYERπIF PLAYER > 2 THEN GOTO GPπIF PLAYER = 0 THEN GOTO GPπL1 = 50πL2 = 50πON ERROR GOTO NOEGAπSCREEN 7: GOTO EGAπNOEGA:πFLAG = 1: SCREEN 1: GOTO EGAπEGA:πTITLEπRANDOMIZE TIMERπPRINT "1) Rayden" 'ELECTRIC THROWπPRINT "2) Sub Zero" ' ICE THROWπPRINT "3) Scorpion" ' VAN DAM SPEARπPRINT "4) Sonya" ' SONIC WAVEπPRINT "5) Johny Cage" ' SHADOW KICKπPRINT "6) Lui Kang" ' GREEN FLAMEπPRINT "7) Kano" ' KNIFE THROWπINPUT "Player 1: ", CHARπIF PLAYER = 1 THEN GOTO SKIPπINPUT "Player 2: ", CHAR2πSKIP:πIF PLAYER = 1 THEN CHAR2 = INT(RND(1) * 7) + 1πCLS : COLOR 1, 1πgetcharactersπDRAWBACKπCOLOR 4, 1πLOCATE 2, 15: PRINT "FIGHT"πX1 = 50πX2 = 260πPUT (X1, 91), R1, PSETπPUT (X2, 91), R2, PSETπIN:πK$ = INKEY$πIF FINISH1 = 1 THEN GOTO p2πIF K$ = "/" AND FINISH2 = 1 THEN PIT2πIF K$ = "6" THEN WALKF1: FLAG1 = 1: GOSUB CHECK1πIF K$ = "4" THEN WALKB1: FLAG2 = 1: GOSUB CHECK2πIF K$ = "+" THEN PUNCH1: FLAG3 = 1: GOSUB CHECK3: STAT1πIF K$ = CHR$(13) THEN KICK1: FLAG4 = 1: GOSUB CHECK4: STAT1πIF K$ = "9" THEN JUMP1πIF K$ = "7" THEN JUMPB1πIF FINISH2 = 1 THEN GOTO INπIF PLAYER = 1 THEN GOTO SP1πp2:πIF K$ = "R" AND FINISH1 = 1 THEN PIT2πIF K$ = "D" THEN WALKF2: FLAGG2 = 1: GOSUB CCHECK2πIF K$ = "A" THEN WALKB2: FLAGG1 = 1: GOSUB CCHECK1πIF K$ = "F" THEN PUNCH2: FLAGG3 = 1: GOSUB CCHECK3: STAT2πIF K$ = "V" THEN KICK2: FLAGG4 = 1: GOSUB CCHECK4: STAT2πIF K$ = "E" THEN JUMP2πIF K$ = "Q" THEN JUMPB2πIF FINISH1 = 1 AND PLAYER = 1 THEN COMP: GOTO INπIF FINISH1 = 1 THEN GOTO INπ'SPECIAL MOVES:πSP1:π'P1:πIF K$ = "1" AND FLAG2 = 1 THEN FLAG2 = 0: FRYπIF K$ = "2" AND FLAG3 = 1 THEN FLAG3 = 0: KNIFEπIF K$ = "8" AND FLAG4 = 1 THEN FLAG4 = 0: SHADOWπIF K$ = "3" AND FLAG3 = 1 THEN FLAG2 = 0: SONICπIF K$ = "1" AND FLAG3 = 1 THEN FLAG3 = 0: ICEπIF K$ = "8" AND FLAG3 = 1 THEN FLAG3 = 0: SPEARπIF K$ = "2" AND FLAG4 = 1 THEN FLAG4 = 0: FLAMEπIF PLAYER = 1 THEN COMPπIF PLAYER = 1 THEN GOTO INπ'P2πIF K$ = "Z" AND FLAGG2 = 1 THEN FLAGG2 = 0: FRY2πIF K$ = "X" AND FLAGG3 = 1 THEN FLAGG3 = 0: KNIFE2πIF K$ = "W" AND FLAGG4 = 1 THEN FLAGG4 = 0: SHADOW2πIF K$ = "C" AND FLAGG3 = 1 THEN FLAGG2 = 0: SONIC2πIF K$ = "Z" AND FLAGG3 = 1 THEN FLAGG3 = 0: ICE2πIF K$ = "W" AND FLAGG3 = 1 THEN FLAGG3 = 0: SPEAR2πIF K$ = "X" AND FLAGG4 = 1 THEN FLAGG4 = 0: FLAME2πGOTO INπCHECK1:πIF FLAG2 = 1 THEN FLAG2 = 0πIF FLAG3 = 1 THEN FLAG3 = 0πIF FLAG4 = 1 THEN FLAG4 = 0πRETURNπCHECK2:πIF FLAG1 = 1 THEN FLAG1 = 0πIF FLAG3 = 1 THEN FLAG3 = 0πIF FLAG4 = 1 THEN FLAG4 = 0πRETURNπCHECK3:πIF FLAG2 = 1 THEN FLAG2 = 0πIF FLAG1 = 1 THEN FLAG1 = 0πIF FLAG4 = 1 THEN FLAG4 = 0πRETURNπCHECK4:πIF FLAGG2 = 1 THEN FLAG2 = 0πIF FLAGG3 = 1 THEN FLAG3 = 0πIF FLAGG1 = 1 THEN FLAG1 = 0πRETURNππCCHECK1:πIF FLAGG2 = 1 THEN FLAGG2 = 0πIF FLAGG3 = 1 THEN FLAGG3 = 0πIF FLAGG4 = 1 THEN FLAGG4 = 0πRETURNπCCHECK2:πIF FLAGG1 = 1 THEN FLAGG1 = 0πIF FLAGG3 = 1 THEN FLAGG3 = 0πIF FLAGG4 = 1 THEN FLAGG4 = 0πRETURNπCCHECK3:πIF FLAGG2 = 1 THEN FLAGG2 = 0πIF FLAGG1 = 1 THEN FLAGG1 = 0πIF FLAGG4 = 1 THEN FLAGG4 = 0πRETURNπCCHECK4:πIF FLAGG2 = 1 THEN FLAGG2 = 0πIF FLAGG3 = 1 THEN FLAGG3 = 0πIF FLAGG1 = 1 THEN FLAGG1 = 0πRETURNππSUB COMPπD1 = INT(RND(1) * 20) + 1πD2 = INT(RND(1) * 25) + 1πD3 = INT(RND(1) * 65) + 1πRANDOMIZE TIMERπIF X2 > X1 + 15 AND D1 = 2 THENπX2 = X2 - 1: WALKB2πEND IFπIF X2 > X1 + 5 AND X2 < X1 + 19 AND D2 = 6 THENπPUNCH2πEND IFπIF X2 > X1 + 5 AND X2 < X1 + 19 AND D2 = 25 THENπKICK2πEND IFπIF FINISH1 = 1 THEN ENDπIF D3 = 65 THENπIF CHAR2 = 1 THEN FRY2πIF CHAR2 = 2 THEN ICE2πIF CHAR2 = 3 THEN SPEAR2πIF CHAR2 = 4 THEN SONIC2πIF CHAR2 = 5 THEN SHADOW2πIF CHAR2 = 6 THEN FLAME2πIF CHAR2 = 7 THEN KNIFE2πEND IFπIF X2 < X1 + 15 AND D1 = 20 THENπJUMP2πEND IFπEND SUBππSUB DEADπCOLOR 15πLOCATE 7, 15: PRINT "FINISH HIM"πEND SUBππSUB DRAWBACKπCLSπCOLOR 1, 1πLINE (0, 125)-(319, 155), 7, BFπLINE (30, 135)-(34, 200), 7πLINE (60, 135)-(56, 200), 7πPAINT (50, 199), 7πLINE (250, 135)-(254, 200), 7πLINE (290, 135)-(286, 200), 7πPAINT (270, 199), 7πLINE (100, 130)-(110, 130), 15πLINE (100, 130)-(100, 150), 15πLINE (100, 150)-(110, 150), 8πLINE (110, 150)-(110, 130), 8πLINE (115, 130)-(115, 150), 15πLINE (115, 130)-(125, 140), 15πLINE (125, 140)-(130, 130), 15πLINE (130, 132)-(130, 150), 8πLINE (128, 150)-(128, 140), 8πLINE (128, 140)-(125, 144), 8πLINE (125, 144)-(119, 138), 8πLINE (119, 138)-(119, 150), 8πLINE (119, 150)-(115, 150), 8πLINE (130, 150)-(128, 150), 8πLINE (135, 130)-(135, 150), 15πLINE (135, 130)-(138, 130), 15πLINE (138, 130)-(138, 140), 15πLINE (138, 140)-(143, 135), 15πLINE (143, 135)-(145, 137), 8πLINE (145, 137)-(138, 143), 8πLINE (138, 143)-(145, 150), 8πLINE (135, 150)-(145, 150), 8πIF CHAR = 1 THEN CHAR$ = "Rayden"πIF CHAR = 2 THEN CHAR$ = "Sub Zero"πIF CHAR = 3 THEN CHAR$ = "Scorpion"πIF CHAR = 4 THEN CHAR$ = "Sonya"πIF CHAR = 5 THEN CHAR$ = "Johny Cage"πIF CHAR = 6 THEN CHAR$ = "Lui Kang"πIF CHAR = 7 THEN CHAR$ = "Kano"ππIF CHAR2 = 1 THEN CHAR2$ = "Rayden"πIF CHAR2 = 2 THEN CHAR2$ = "Sub Zero"πIF CHAR2 = 3 THEN CHAR2$ = "Scorpion"πIF CHAR2 = 4 THEN CHAR2$ = "Sonya"πIF CHAR2 = 5 THEN CHAR2$ = "Johny Cage"πIF CHAR2 = 6 THEN CHAR2$ = "Lui Kang"πIF CHAR2 = 7 THEN CHAR2$ = "Kano"πLOCATE 1, 1: PRINT CHAR$; CHAR2$πEND SUBππSUB DRAWBACK2πIF FLAG = 0 THENπLINE (0, 26)-(319, 124), 1, BFπEND IFπIF FLAG = 1 THENπLINE (0, 26)-(319, 124), 0, BFπEND IFπCOLOR 15πLOCATE 5, 4: PRINT CHAR$πLOCATE 5, 25: PRINT CHAR2$πCOLOR 1, 1πSTAT1πSTAT2πEND SUBππSUB ENDERπCOLOR 15πLOCATE 7, 14πIF FINISH1 = 1 THEN PRINT CHAR2$;πIF FINISH2 = 1 THEN PRINT CHAR$;πPRINT " Wins!"πWHILE INKEY$ = "": WENDπWHILE INKEY$ = "": WENDπSYSTEMπEND SUBππSUB FLAMEπIF CHAR <> 6 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), P1πPUT (X2, 91), R2πFOR I = X1 + 12 TO X2πCIRCLE (I, 91 + 15), 3, 10πPUT (X1, 91), P1πPUT (X2, 91), R2πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL2 = L2 - 5: STAT2πEND SUBππSUB FLAME2πIF CHAR2 <> 6 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), p2πPUT (X1, 91), R1πI = X2πFOR V = X1 + 12 TO X2πI = I - 1πCIRCLE (I, 91 + 15), 3, 10πPUT (X2, 91), p2πPUT (X1, 91), R1πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL1 = L1 - 5: STAT1πEND SUBππSUB FRYπIF CHAR <> 1 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), P1πPUT (X2, 91), R2πIF FLAG = 0 THENπLINE (X1 + 16, 91 + 19)-(X2 + 8, 91 + 19), 14πEND IFπIF FLAG = 1 THENπLINE (X1 + 16, 91 + 19)-(X2 + 8, 91 + 19), 1πEND IFπFOR I = 1 TO 500: NEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πL2 = L2 - 7: STAT2πEND SUBππSUB FRY2πIF CHAR2 <> 1 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), p2πIF FLAG = 0 THENπLINE (X2, 91 + 19)-(X1 + 8, 91 + 19), 14πEND IFπIF FLAG = 1 THENπLINE (X2, 91 + 19)-(X1 + 8, 91 + 19), 1πEND IFπFOR I = 1 TO 500: NEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πL1 = L1 - 7: STAT1πEND SUBππSUB getcharactersπ'R1πCIRCLE (7, 7), 5, 7πLINE (7, 12)-(7, 24), 8πLINE (7, 24)-(0, 33), 5πLINE (7, 24)-(14, 33), 5πLINE (7, 19)-(12, 12), 8πGET (0, 0)-(15, 33), R1π'R2πCIRCLE (28, 7), 5, 7πLINE (28, 12)-(28, 24), 8πLINE (28, 24)-(21, 33), 5πLINE (28, 24)-(35, 33), 5πLINE (28, 19)-(19, 12), 8πGET (18, 0)-(35, 33), R2π'W1πCIRCLE (49, 7), 5, 7πLINE (49, 12)-(49, 33), 8πLINE (49, 24)-(49, 33), 5πLINE (49, 24)-(56, 33), 5πLINE (49, 19)-(54, 12), 8πGET (39, 0)-(56, 33), W1π'W2πCIRCLE (70, 7), 5, 7πLINE (70, 12)-(70, 33), 8πLINE (70, 24)-(70, 33), 5πLINE (70, 24)-(65, 33), 5πLINE (70, 19)-(65, 12), 8πGET (60, 0)-(75, 33), W2π'P1πCIRCLE (91, 7), 5, 7πLINE (91, 12)-(91, 24), 8πLINE (91, 24)-(86, 33), 5πLINE (91, 24)-(96, 33), 5πLINE (91, 19)-(100, 19), 8πGET (81, 0)-(101, 33), P1π'P2πCIRCLE (112, 7), 5, 7πLINE (112, 12)-(112, 24), 8πLINE (112, 24)-(107, 33), 5πLINE (112, 24)-(117, 33), 5πLINE (112, 19)-(101, 19), 8πGET (101, 0)-(117, 33), p2π'K1πCIRCLE (133, 7), 5, 7πLINE (133, 12)-(133, 33), 8πLINE (133, 24)-(133, 33), 5πLINE (133, 24)-(148, 24), 5πLINE (133, 19)-(138, 12), 8πGET (123, 0)-(148, 33), K1π'K2πCIRCLE (164, 7), 5, 7πLINE (164, 12)-(164, 33), 8πLINE (164, 24)-(164, 33), 5πLINE (164, 24)-(150, 24), 5πLINE (164, 19)-(159, 12), 8πGET (149, 0)-(170, 33), K2π'DπLINE (174, 15)-(195, 15), 4πLINE (174, 17)-(195, 17), 4πLINE (195, 16)-(216, 16), 9πCIRCLE (222, 16), 5, 6πGET (174, 12)-(227, 22), D1πEND SUBππSUB ICEπIF CHAR <> 2 THEN EXIT SUBπIF FLAG = 1 THEN C = 1πIF FLAG = 0 THEN C = 9πPUT (X1, 91), P1πPUT (X2, 91), R2πFOR I = X1 + 12 TO X2πLINE (I, 106)-(I + 5, 110), C, BFπPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL2 = L2 - 3: STAT2πEND SUBππSUB ICE2πIF CHAR2 <> 2 THEN EXIT SUBπIF FLAG = 1 THEN C = 1πIF FLAG = 0 THEN C = 9πPUT (X2, 91), p2πPUT (X1, 91), R1πI = X2πFOR V = X1 + 12 TO X2πI = I - 1πLINE (I, 106)-(I + 5, 110), C, BFπPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL1 = L1 - 3: STAT1πEND SUBππSUB JUMP1π        IF X1 > 285 THEN EXIT SUBπ        DRAWBACK2π        PUT (X2, 91), R2π        PUT (X1, 85), R1π        DRAWBACK2π        FOR I = 1 TO 5π        X1 = X1 + 1π        PUT (X1 + I + 10, 76 + I), R1π        PUT (X2, 91), R2π        DRAWBACK2π        NEXTπ        X1 = X1 + 30π        PUT (X1, 91), R1π        PUT (X2, 91), R2ππEND SUBππSUB JUMP2πIF X2 > 262 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 85), R1πDRAWBACK2πFOR I = 1 TO 5πX2 = X2 + 1πPUT (X2 + I + 10, 76 + I), R2πPUT (X1, 91), R1πDRAWBACK2πNEXTπX2 = X2 + 30πPUT (X1, 91), R1πPUT (X2, 91), R2πππEND SUBππSUB JUMPB1πIF X1 < 35 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 85), R1πDRAWBACK2πFOR I = 1 TO 5πX1 = X1 - 1πPUT (X1 - I - 10, 76 + I), R1πPUT (X2, 91), R2πDRAWBACK2πNEXTπX1 = X1 - 30πPUT (X1, 91), R1πPUT (X2, 91), R2ππEND SUBππSUB JUMPB2πIF X2 < 35 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 85), R1πDRAWBACK2πFOR I = 1 TO 5πX2 = X2 - 1πPUT (X2 - I - 10, 76 + I), R2πPUT (X1, 91), R1πDRAWBACK2πNEXTπX2 = X2 - 30πPUT (X1, 91), R1πPUT (X2, 91), R2πππEND SUBππSUB KICK1πDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 91), K1πFOR I = 1 TO 1000: NEXTπDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 91), R1πIF X1 + 16 > X2 AND X1 < X2 + 12 THEN L2 = L2 - 1: STAT2πEND SUBππSUB KICK2πDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), K2πFOR I = 1 TO 1000: NEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πIF X2 - 8 < X1 + 10 THEN L1 = L1 - 1: STAT1πEND SUBππSUB KNIFEπIF CHAR <> 7 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), P1πPUT (X2, 91), R2πFOR I = X1 + 12 TO X2πLINE (I, 95)-(I + 5, 100), 7πPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL2 = L2 - 5: STAT2πEND SUBππSUB KNIFE2πIF CHAR <> 7 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), p2πPUT (X2, 91), R1πI = X2πFOR V = X1 + 12 TO X2πI = I - 1πLINE (I, 95)-(I + 5, 100), 7πPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL1 = L1 - 5: STAT1πEND SUBππSUB PIT2πCLSπFOR Y = 1 TO 180πCOLOR 1, 1πLINE (34, 0)-(56, 200), 7, BFπLINE (254, 0)-(286, 200), 7, BFπLINE (0, 190)-(319, 200), 7, BFπFOR I = 1 TO 320 STEP 20πLINE (I, 190)-(I + 5, 180), 15πLINE (I + 15, 190)-(I + 10, 180), 15πNEXTπLINE (34, 0)-(34, 200), 7πLINE (56, 0)-(56, 200), 7πPAINT (36, 1), 7πIF FINISH2 = 1 THEN PUT (X2, Y), D1, PSETπIF FINISH1 = 1 THEN PUT (X1, Y), D1, PSETπFOR I = 1 TO 150: NEXTπLINE (57, 0)-(253, 176), 1, BFπNEXTπLINE (254, 0)-(286, 200), 7, BFπLINE (0, 190)-(319, 200), 7, BFπFOR I = 1 TO 320 STEP 20πLINE (I, 190)-(I + 5, 180), 15πLINE (I + 15, 190)-(I + 10, 180), 15πNEXTπLINE (34, 0)-(34, 200), 7πLINE (56, 0)-(56, 200), 7πPAINT (36, 1), 7πPITENDERπππEND SUBππSUB PITENDERπCOLOR 15πLOCATE 4, 15: PRINT "PIT FATALITY"πLOCATE 7, 13πIF FINISH1 = 1 THEN PRINT CHAR2$;πIF FINISH2 = 1 THEN PRINT CHAR$;πPRINT " Wins!"πWHILE INKEY$ = "": WENDπWHILE INKEY$ = "": WENDπSYSTEMπEND SUBππSUB PUNCH1πDRAWBACK2πPUT (X2, 91), R2πPUT (X1, 91), P1πFOR I = 1 TO 1000πNEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πIF X1 + 16 > X2 AND X1 < X2 + 12 THEN L2 = L2 - 1: STAT2πEND SUBππSUB PUNCH2πDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), p2πFOR I = 1 TO 1000: NEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πIF X2 - 8 < X1 + 8 THEN L1 = L1 - 1: STAT1πEND SUBππSUB SHADOWπIF CHAR <> 5 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R1πFOR I = 1 TO 10πX1 = X1 + 5πPUT (X1, 91), K1πPUT (X2, 91), R2πDRAWBACK2πNEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πIF X1 > X2 THEN L2 = L2 - 6: STAT2πEND SUBππSUB SHADOW2πIF CHAR2 <> 5 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), R1πFOR I = 1 TO 10πX2 = X2 - 5πPUT (X2, 91), K2πPUT (X1, 91), R1πDRAWBACK2πNEXTπDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πIF X2 < X1 + 12 THEN L1 = L1 - 6: STAT1ππEND SUBππSUB SONICπIF CHAR <> 4 THEN EXIT SUBπIF FLAG = 1 THEN C = 2πIF FLAG = 0 THEN C = 12πDRAWBACK2πPUT (X1, 91), P1πPUT (X2, 91), R2πFOR I = X1 TO X2πLINE (I, 98)-(I, 105), CπLINE (I + 2, 97)-(I + 1, 104), CπLINE (I + 4, 96)-(I + 2, 103), CπPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πNEXTπL2 = L2 - 4: STAT2πEND SUBππSUB SONIC2πIF CHAR <> 4 THEN EXIT SUBπIF FLAG = 1 THEN C = 2πIF FLAG = 0 THEN C = 12πDRAWBACK2πPUT (X2, 91), p2πPUT (X1, 91), R1πI = X2πFOR V = X1 TO X2πI = I - 1πLINE (I, 98)-(I, 105), CπLINE (I - 2, 97)-(I - 1, 104), CπLINE (I - 4, 96)-(I - 2, 103), CπPUT (X1, 91), R1πPUT (X2, 91), R2πDRAWBACK2πPUT (X1, 91), R1πPUT (X2, 91), R2πNEXTπL1 = L1 - 4: STAT1πEND SUBππSUB SPEARπIF CHAR <> 3 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), P1πPUT (X2, 91), R2πLINE (X1 + 16, 91 + 19)-(X2 + 8, 91 + 19), 8πFOR I = X1 TO X2 - 15πX2 = X2 - 1πPUT (X1, 91), P1πPUT (X2, 91), R2πLINE (X1 + 16, 91 + 19)-(X2 + 8, 91 + 19), 8πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL2 = L2 - 4: STAT2πEND SUBππSUB SPEAR2πIF CHAR2 <> 3 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), p2πPUT (X1, 91), R1πLINE (X2, 91 + 19)-(X1 + 8, 91 + 19), 8πFOR I = X1 TO X2 - 15πX1 = X1 + 1πPUT (X2, 91), p2πPUT (X1, 91), R1πLINE (X2, 91 + 19)-(X1 + 8, 91 + 19), 8πDRAWBACK2πNEXTπPUT (X1, 91), R1πPUT (X2, 91), R2πL1 = L1 - 4: STAT1πEND SUBππSUB STAT1πIF FINISH1 = 1 OR FINISH2 = 1 THEN ENDERπIF L1 < 0 THEN DEAD: FINISH1 = 1πIF FLAG = 0 THEN C1 = 14: C2 = 4πIF FLAG = 1 THEN C1 = 4: C2 = 2πLINE (0, 5)-(150, 25), C1, BFπLINE (L1 * 3, 5)-(150, 25), C2, BFπEND SUBππSUB STAT2πIF FINISH1 = 1 OR FINISH2 = 1 THEN ENDERπIF L2 < 0 THEN DEAD: FINISH2 = 1πIF FLAG = 0 THEN C1 = 14: C2 = 4πIF FLAG = 1 THEN C1 = 4: C2 = 2πLINE (170, 5)-(320, 25), C1, BFπLINE (L2 * 3 + 170, 5)-(320, 25), C2, BFπEND SUBππSUB TITLEπCOLOR 0, 7πLINE (50, 20)-(50, 150), 15πLINE (50, 20)-(75, 20), 15πLINE (75, 20)-(75, 150), 8πLINE (75, 150)-(50, 150), 8πLINE (90, 20)-(90, 150), 15πLINE (90, 20)-(115, 70), 15πLINE (115, 70)-(130, 20), 15πLINE (130, 22)-(130, 150), 8πLINE (125, 150)-(125, 65), 8πLINE (125, 65)-(115, 85), 8πLINE (115, 85)-(105, 65), 8πLINE (105, 65)-(105, 150), 8πLINE (105, 150)-(90, 150), 8πLINE (125, 150)-(130, 150), 8πLINE (140, 20)-(140, 150), 15πLINE (140, 20)-(150, 20), 15πLINE (150, 20)-(150, 90), 15πLINE (150, 90)-(175, 70), 15πLINE (175, 70)-(180, 80), 8πLINE (180, 80)-(150, 100), 8πLINE (150, 100)-(190, 150), 8πLINE (190, 150)-(140, 150), 8πCOLOR 1πLOCATE 1, 1: PRINT "IMMORTAL KOMBAT.........."πLOCATE 20, 15: PRINT "1994 G.P.S Software......"πLOCATE 22, 10: PRINT "By: John Diamond"πWHILE INKEY$ = "": WENDπCLS : COLOR 15, 0π'IF FLAG = 1 THEN SCREEN 1π'IF FLAG = 0 THEN SCREEN 7πEND SUBππSUB WALKB1πIF X1 < 5 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R2πX1 = X1 - 4πPUT (X1, 91), W1πX1 = X1 - 1πFOR I = 1 TO 200: NEXTπDRAWBACK2πX1 = X1 - 1πPUT (X1, 91), R1πPUT (X2, 91), R2πEND SUBππSUB WALKB2πIF X2 < 2 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), R1πX2 = X2 - 4πPUT (X2, 91), W2πFOR I = 1 TO 200: NEXTπDRAWBACK2πX2 = X2 - 1πPUT (X1, 91), R1πPUT (X2, 91), R2πEND SUBππSUB WALKF1πIF X1 > 295 THEN EXIT SUBπDRAWBACK2πPUT (X2, 91), R2πX1 = X1 + 4πPUT (X1, 91), W1πFOR I = 1 TO 200: NEXTπDRAWBACK2πPUT (X2, 91), R2πX1 = X1 + 1πPUT (X1, 91), R1πEND SUBππSUB WALKF2πIF X2 > 295 THEN EXIT SUBπDRAWBACK2πPUT (X1, 91), R1πX2 = X2 + 4πPUT (X2, 91), W2πFOR I = 1 TO 200: NEXTπDRAWBACK2πX2 = X2 + 1πPUT (X2, 91), R2πPUT (X1, 91), R1πEND SUBππEric Carr                      (SONIC) SPINBALL               FidoNet QUIK_BAS Echo          04-08-96 (16:48)       QB, QBasic, PDS        139  9220     SONIC.BAS   'Hey! Here is a little sonic like game that i made about 1 1/2 to 2 years ago,π'and just thought I'd post it.It's call Spinball..It's in screen mode 7, iπ'think, so it uses page flipping.  To move the little guy use the left [Ctrl] &π'[Alt] keys for left & right, and the right [Shift] key for jumping. I alsoπ'made a little save feature( [s] to save, [l] to restore) but caps lock has toπ'be off for it to work..Also, if it's too fast or slow, adjust the DELA, or useπ'the white -/+ keys to change. It runs fine on my 486sx when compiled. Again,π'remember I made this a couple years ago, so.....ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SB.ZIP",4^6:Z&=6196:?STRING$(50,177);πU"%up()%9%'%.-%#./REab,sDC%.%%6%%%%-%%%%xf&%jSi%fyxU%ye+k+KAa8103πU"mVAYoyL&5Map1p3\+4/5+%%up()%9%'%%-%%9#HB=>;$5u&%%%v6%%%+%%%%xg%πU"SvuhEF&fA]<U-5hFuNAC8SISlnwf.\Xb+Oe'siM9Bj\:n]e))rGTqkuv.%nc3]#πU"'#PS\km&<90^l(\$]p2Sch4Eg'M:&k&uU9W9*'vO9444Vi:PmODo0:+0m[4><NgπU"pXBp'&V#cR6P6P)TZLZKEcu6:?F,HX,nZ^W2+UaEV'Qg)/KR424lUC+Q=7k\:sCπU"'=e5(rrsHQeII/?6uAO#S_m9=qGaZ&_4r%(8f1)?I$Wl?4H\U^?-SdJDQ%IDs+7πU"IN8oznlNep5vZs]MouZ[/'e?843sCB7ore,,(sat;XIZU9?_SGT3tO:i5X&F\0jπU"i<0=1CQ*=dz8[Hs3Qqw$)(+LAyD1rWfwAuSZk6L)>>C\/)&<HN4ucP3FW26j8YsπU":N>Fl8;^PA>ZWNPWSme<kUhk3z_0>7>^C9ejL6<]I)jW?DGe<.rfulh.0;y.F-,πU"#Go^Ndmi8m6)8p*98R'H<MxZ\kI/7^p9)BQG5z+e%D[-0g;e3eQpEP=3Kz&_7PIπU"EZwEcN4[=[\UwoIXALWSi_WB[/:UHPXyaaZ4O['4R17G8C?aEYCvO8D]pHm-1I?πU"34D=;sZW8Y;ct;-Z0L[K+ja['2*98]m0:sbsuY#Sg6fADYLnnOG-ZPl)FlqpHiYπU"y(Fa<.C>d%up()%9%'%.-%*.8RER(=tl*'.%%JJ%%%1%%%%xu%nsgf%qqSiRfYfπU"g<8]UEX5?tb0oButIXvy</$G4RVcZ-xfk1CmbHXa:9.V?+I1([\lx&ahV=>6Z>^πU"X#1:C27btsurwU(M6NKx/n>t>ptvuoo^oKODY-Y_LM3'XY9yG;%o_$3Y$S<[tUJπU"s+(_Gfc\+?OB_2')?6t]]WBT,UgKi2VVwJ7e$RJ3bH,T\-Mufsues,1ig?9=9=eπU"OYu3prHKIuD6;I43hiXW3Kb_uLT$4ZBq1==Hzk/QW]t[;54mgrRZDit(U&s$o%YπU"NYiYeQAF9o'MWVjL;,K2x--nCM*:F$J7C6euXggpiP3eM]%X,CcHqFlKdQg^'VLπU"1rlH(2p8zV*[Y=5b<-k4X.cMFgUf<&hq*L+mpYY8uGWVN1\'/yxH4($)/c$C'3CπU",F>)FuEZi#=/)B'3B,X8>E%oU2i*[0CA$kn,?LJxpk8b/:j*jo(P<M5?y9$I?8oπU"GtilgZBfY?+35$(4cHH3gSakl*Z#h:FSvr/_-TM1S?p;0^6u(lsj16G1xGu)dcLπU"\i<jerI4ZtVeIFA'0kvZr-K/TN_GfOO[9\;iceuKwg8oux''1c6343Wl.S>#2c9πU"_JVf2-LB-Kh3m?:GS<oi1zB(d(4%)B7AQTL,:wP:\Cc3TqpS5-1\zkK60KmRuN<πU"vL(tUm)+E:U'YB*<(6j&D7dqXnRWP%$;*M1UqLs,bpQGiu0.d+u0i:)0A>u0+Z-πU":Fe86#5f4F5*(j\w$)971'%P)YhJ<0Qmv_S'x(;Q*xR*iKX0Istg#_&m0#/CLd&πU"PVk-vs'%<Js[\/iYL;g>D<ILG*#PtvA',,7+?r/]LV&^Rd8t$(7,t/Y$\xYnUOyπU"i+DP-%fJKjvBoZ$bXSTlqr6ZBk]X77Dm<qNq0-;x'u%p()9%%'%-C%5.RXE**U,πU"<U%%(%o/%%%1%%%%xun%sgfq%qSVU4Zfdr+3;E5bTpIUU&>i[FP/Z=j-*JHH8[;πU"1KrNc82\rwV$7sRl5olD_Kv^]rUzfjKfSnp.be[E>)-YFmRr/\>7WRZ2#a4^,$fπU"#RTIW>]\ds[Kc.t?l9O^7Mwn&0>\3L$RD-[9hwB;:3w>J5Z])Ah,^hSY7Ger=sDπU"CL%+j$]?V9_)J1>V00aI-)JDKCKm1cTAaPA<Qg2pCi42VS^nFtQsM?mW9;7K6V8πU">YOl6V2M[hvyMOCAKU$i)Z3\Iz^IS.?T5u?1>Sr-VLORwBL6n$?^&&up(%)9%'%πU"%-%q(.RE3KRMQZ%&%%*%2%%1%%%%x%unsg%fqqS[ifFVJfr=SdU1Tp=mU:lFmN:πU"*BMv:xhi$_3fb>Aj;moT7$)X(H1Fs9<LZZ3c'YTTdsTEtv9^[6sP^2s^-#vkt&LπU"\1hoXbpV/+BNb4q?*V#?=i=GJ_]t,[dp]#qk+$c?9jA>ODhK4+ct=PoU4;>4%3gπU"/oj-QdnoRZ[SW-^RSX[g.SU1Wk_4(#J=st%V5[PC[A=y:Im_K[RxBWz8MI%+s+SπU"AES?Cnzb/i-F<\abeo#OI3T6wgtO4I#'UBht\.6Jc>\a$Vm(eBBZP[MrecZU^\#πU"p=$tCJU1xqe0T4Zq(Q?r+2N+pW_hx:&RG><t/8:TtrnTDpl_lt799_oEr5O>IB0πU"_//uXFRT]$GXP%0fZ:IP6(ex31q=[TRtH$.R&(_=6dX+/(#KHg'i#M1YS+JpxM1πU"gf7-GYZl#3,>n?r2FF0P>S='Y3)vQHQ=VL'2;/fA<O^WfCu-091DqbMGU64J0Z5πU"?/BPSO/hwyR%1^0lCZ98GxxVrcvxlX&L(up%()9%%'%-%.u.RE81^1l'*&%%&A?πU"%%%1%%%%xuns%gfqq%SifWWfh:=&SE5eohKw<eK'<pi[dCLWQgV3_bun89:Dh<EπU"m)<&1f/U&s6,fG#CYkH[4i=Qt^Ldj*kE^4Flq_nP]i+&srLMNPp'm-9cogB#4*hπU"p(BqU>KY#;T.a6p%8ug/[#u;%1fj(m;<firECBs'E?,p3w1u\/>JWITpi%FXX9FπU"v)1U-f9*-oXsNEqnp8#*i&e?hXrM.6*0B&&NemhpT1:+Yo*SpP_le-+0fQghFXfπU")*#/N<\C%'eQp&IK6Y+bA\:]\7nsd4/TdqE&Oxq&nTz&INXqkQ2bq4v.-[4KL*.πU"]7.NMX.'$ro\l#vc<(JFNIJ&l#'&Q4H2X=1HeNNL7kT[&]wtl$tmJ3V&)jM)tDCπU"-##bgMYR,f,Qp,6Rf#gOq5,9-0aQ8-GX._=:MQJHbRf)e2PTdf_MQd&l8c3heZ^πU"ks]vV^$#hZS$'E5C-khBLAlB76I[leIW6B+Iu&$[m1kST8qXc29bwS>tUFkHK.fπU"8kVT,qfo?a4T,tFfx4<\3mC(*G8dFL6U#p?AX1n#Ofmh0m,4ZnjX?lTx$j%0up(πU"%)9%'%%-%z^.REqGNuMf#&%%+%Q%%1%%%%x%unsg%fqqS[ifXfMh,=RdU1OXP$1πU"R^:5xT(l(WyBFwNodco+Xqu[4>C&OS&7IZ&k]'QgJg7ucxItEE$rrvGv1h-=6qNπU"3k^?Mwzu8?cciwk&(u'+U01-'Y6&)rQ'CK3kjw%7Rf.yXRx2eXivTFVs4JhO)NfπU"y<^b'c$OdvAequ$b[h%jaIaF]?F#,H(C5A$1DQO*(,0iash1Pt&GOrBP-r<VH7'πU"7.J,8Ok)0nzA]5&k3Um?(xVuk4)RPF):-\EXJJ96u#eB+;g/H$EEV2?&&6'kGafπU"^Q3l)D5nGc>Wi_Gu%+j[sJvkv[E)AZT&hoTF5.j^%j=t63X>i:/Up1MghTwOA'FπU"aF2XO9*FjQ30Tk-F>)*x<90A>Y5Xe9MD&0b)uDSHdw^HCk17-#m%7x5/5DKKk;fπU"I-\0=g=PfYmX.^H(wJ:*ttFl.-F/-o:%Q#Kc-,CQqPT(.)H[e(.%U.>]ip#Ja5uπU"%[U05iDP'UMg)2*:IQe_g=6:?t6pZM]neE-x_E9*\eItvn.i6a5&M%up%()9%%'πU"%-%.R.RE>Y=VM&s/%%'=N%%%+%%%%xgSg7fxf?q,>TANj,Om9t_J>(Udm&8FJR7πU"BHVe$%Pj/J]+GBD/INkiooBY,YQQPVPoA>9ottsUe.5ohlpShvLEfa4e*sY/*9(πU"K^WUl(lhlllVA4M+rJ8+MBOv&SrI.QuJU3BVI%(F'?>oWK>8B1=249^4vn-[GD*πU"?uQn%ZU2BD]O,nFd;P/ZNC$^/&3z81q4&3jL1zYj;:=.(7\+-3-ydE4o:RYAg.VπU"TK<+o972g9K.eOU/.$9$ts5%xfkvD*1?vb$#E1,&0tl:>cg8+kX]USd:-tNTDSNπU"jYuD)X83e.pbJc-hlJQDIN%ARfaR'JY^f:hti(mO3t))Wv'=Oqus)CvDdoUc'36πU"E86vx2E-I$Dz%s.\^G&L%](64oI;NCj'N.9I0W^Tu3$B')(_v;+MZyq#hWnkC/xπU"5yhSN)p-wDdKi:,)\t.:l.P66k%7PRp%)51ge3Dy(Q15>O4g]U-(O,R:c:V[,=)πU")=#i\S/9AVBj$h)V,TWG?_-2MZG,#HL=Rau=aOOg'-$,.VRP-/$.z\gBEOH4(^TπU"C[iHY5W\1X2.z,nBfkRKo7,^h(6VQQRi8^<mY3/&JH.^t4lT7&TXL,f;,0TvH3pπU"x;4lgLEEMzd#OnWmP#:liFkXh#&zj&6.&9eT_YK9b'kDxw5Xo0/173mydIbej&JπU"[XzoQ.s<mhYzg:h>HZ=uT>%kJ^FR%cGJIgXUGP'y=3MAo7wlIuL/ydxDg6E7R)rπU"\?(iiu=]jXD3b\<+duY&PdC:+>#]^SGF&SDgM.llW:QrYgXgYZ6;L(TO[%hJRQ;πU"sd1V]Pwska0Y=-f#+yN9+u[xtpZa_j:5+::_T%EA]u?:;J_EM3QvXD/WbVxpI][πU"9TH))%eRIzsJ)5^u;x&t6m-Um6-tA$[&HY?-Cn]%i(W%_G#P>fCbza:ngLfrqpsπU"FRqJ>8U+tcp-:;nU]v^lWTZ]HDv5L[nkNZiOMe_,rf5E/p^Qq%h_>I?29z]9s&cπU"U&$q$fAu20pF6-HFDdO-k)^=GBd=*$gqQ^Y=u;Qgq6UH$\O+EBawE_hc']F6ipgπU"kWZ'gB(YfcIOZS:^rAxbrfV<anyd:^d[EFGJQ<2*C_K-i_ai\uT$huWr<Gf%hkTπU"7AZZ02,L^W?8[rO&YV5/cWuoi+H-KFg3bK;j[;b4lGLY,VqFrgGBS+[^j?RhCX&πU"dNP[:$[,B9waGB?kkhFB#<rJfl;ZGmR]=uGg%ci1J$[wiUVMWqn=J[-ilUT\qi>πU"=<w/VK%baTvxjH2RrX_Lj4X?C$iFIcTX^<NkL7bH$Fkgd;:G$N=Bkr0<FR5$H.pπU"PLl*X\gbiuZT/?K4RlHuMZN<:6F'[EEhl2lu7eOHn*zs+Jro.BAdA:hCM/pWoPRπU"/gh];,&qn1SCYh/8TWb./jh>+5>UD1nKtjv?4O^aBtbaGP+o2+u)\)>tm3cZ<kfπU"eIDalJ&j98\*l_]Fd98Rb-r288y5Dr#>k=%L?<Ne$Ovm;#kPp4m/gYI$_ebqSK^πU"^D&,#dJ:r7um^pc\)P;N2Q#*Iqa5C<SoV',VWNx%;#/PK6brDSoTJX=2]BQ76[sπU"ptsC5])9(f5Cr<XW,bDdW$X^5>A_K/4dr<[28muInMccmB7S9v-]*9QN9(*>11+πU"bFet&K'vhmT+Boo0m76<OXM$I[ldF^dBJY31^m830qwv\.Ltgm_.R>RSgv&-e&2πU"BspK-m^aEKe#:%Htr(D:TRHSHa2L8tieX\/^\Fv,rQ$/vB)SxX6#5m_pRi*5k4KπU"R=]_#XRH_$-=$(hptSQ9kzDzRrS58QZfmxHes5TGT6VkO/n\FKa+y5\CorJC(*uπU"5gaw%KU\2()9bxCm'tO.cJ\pFdF(AWl')oYJ%zTNf5a3A5chS+>O2&yFRe+q%;SπU"P2.7(OhzcBjc&8g.duI40(J]A/rR:?>&NoXnL.owN0VHKo-Gr4w^fOgTutof6QCπU",q'ySIhn\>,E$81kh46'hi[v'7:tVw4aNy6_e-pCWCm&);Fl23fMl/j#zx))-oaπU"=r1er?wWmPU;r9*7%cB%:2NWWw%L;FVsS<xVQ7b+8-J.0bu2rAY;J.yshbs<a7MπU"cer9D#uKAlG%d+n-n0&8dY$4uMTm.Wev^vUJk\DZ.36P9N*UQiXN)W=wJr2$uKRπU"0M&:FBN(L-,IT#?Mov&G(2=%?31D%zt0-<J3rh%P8uW9NkQHDz6pmmIWOQux)txπU"&Qtj4DZDrlF>hckV*w>ekpfuxW$8llDZ^>VpAh_hV:*JqU69njXN_=QFHOeJxoSπU"E.?pjs;kJ-VbA.J<k<tQuCFm/>WWEV7#wSM-.Q2gmV=svEZt507=).,>*/W=uLAπU"k3V.=fT6;H-p;UZK?jiBmmhrejj%slP6*l?U9/Md=*7hVih^wZQ8^hG'=Mf*R2-πU"6lZ>Oo:bG1K/KW.nEXt3>[kG8k1.Jh7MofCV5K&T2R_)hIn=J_jNt6],-F5$6o2πU"IZ+_R7#GE7R?eR\Z$P,=R8,=&$B$ko6>)uNK7XP.IDWbXHUk1U6%WE$iP[>Ka(gπU"GAC2x*?A7M-Nr[HF7c+0b7xg6(17WQ17K7DVvyQF>FWLX:u,r456X>*QHluM#oqπU"tLj6#f(wkfYsrxWWOI[b[VGP_Re_#$S6\_CdejX].s?M<4207ItdC5gJfY2HOO)πU"]M)f_>T=]lt^gl:kr$vkH]IAKm3Ctr]nO,M_u04nipNN*Iw22I/W0UxV+&a2Pr6πU"RXxx#X/R(_#mEXZnG*SS(6:iM4PULT4Ypj&_kGab:dfN26$a7KV>uY4-*E[Xh#)πU"T$9mJIL(BG$r$CrgnoalmiE(vxb%51vgqlE?gL(MU;8'Jn83IW[5O3d+7DB5[n/πU"AIZ\;ht6_axJePy-Mm[jjziVIUv?_w&IbV(iJ$88sqoO8cB7HrIxSgnZ+T-)kI?πU"A<otZ+rl3[9Fl+vB7j9H$3:s>DzdM]d8uVGp0hrCf,RLYK>?tnaS^-0ri9\Nc:dπU"%(LhLDBo%C7nK%\]>XR5SGbDi_9Td5(mb$^73&sFyk31[_>A0Xg6YSH3C+h3+L#πU"/s9k#M]v?bqYi:)XQ8*%L/s9+R0vY73#SU\\B.HgccAP*HsqQkel'D_\*Kf(?WUπU"=lq<0XL49ml;nLXqS?K+b?Rmph)a>bIirL>xXd00N\fktVs_XIaXnT^j6tK/t(bπU"IylOq_&bbME(Ja9F&VaguDKA9oLu.AFJr[iaHHg_z4'd3?9VgrFYHCKpj#qIT'sπU"ab.Ks8keG0E_B,,>/&^ZKwEiy:*lvjqaT?0_q##&9.:&zcTUe1O(&<r/DCv#GB0πU"F1FrFA?0%DsD5)Dr(iv$bwRSpkHWa:%Tl/tNv8rQbfrPfMGg>H^VYa.Et*Mmg)sπU"?]xWRH_4G\S[CXcWXa0U4.d(P-c(-Wc('Ib%4k2>RbLFlQe07r.V&hZV/_cG*ueπU"u[D9x5S9j(PKFL]C1\.45Gk$JtU52(c\6Lx[*p>up%&'9%%9%'%.-%#./REab,sπU"DC%.%%6%%%%-%%%%%%%%%&%%E%%%%%%%%.xf%j%Sify%up&'%9%9%%'%-%%%9HBπU"L=>$5'u&%%%v6%%%+%%%%%%%%%&%E%%%%i%%%%xg%Svuh%up&'%9%9%%'%-%/*.πU"RE]R(tl'*'%%&JJ%%%1%%%%%%%%%&%E%.%%3'%%%xu%nsgf%qqSi%fYup%&'9%%πU"9%'%.-%5.nRE**;U<U%.%%o/%%%1%%%%%%%%%&%%E%%%%d*%%%xuns%gfqq%SVUπU"Z%up&'%9%9%%'%-%.q.REF3RMQ&Z&%%%*2%%%1%%%%%%%%%&%E%%%%j+%%%xu%nπU"sgf%qqSi%fFup%&'9%%9%'%%-%u./RE1^91l*&.%%A?%%%1%%%%%%%%%&%%E%%%πU"'s,%%%xuns%gfqq%SifW%up&'%9%9%%'%-%.z.RE<qNuM&f&%%&+Q%%%1%%%%%%πU"%%%&%E%7%%N.%%%xu%nsgf%qqSi%fXup%&'9%%9%'%%-%R.eREY=0VMs/7%%=N%πU"%%+%%%%%%%%%&%%E%%%&e0%%%xgSg%fxup%*+%%%%%-%7-%9&.%%-;%%%%%πEND SUBπCLOSE:IF S=215AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπEric Carr                      SPINBALL GAME UPDATE           FidoNet QUIK_BAS Echo          04-14-96 (20:28)       QB, QBasic, PDS        53   3538     SCROLL.BAS  'HI all! Remember that little Spinball game I posted a couple of days ago??π'Well, I'm thinking about makeing a better version of it..REAL graphics for theπ'backgroud instead of text..smooth scrolling background that is bigger. So farπ'this is all i've made today..I sample of a scrolling background..THIS MUST BEπ'COMPILED or it won't work..because it pokes above the 32767 barrier thing..Useπ'the keypad keys (up, down, left and right) to move it. Numlock MUST be on.π'This is just a simple thing that i spent a couple of hours on, so you can'tπ'press more than one key..it uses that old INKEY$..Hope this helps someone outπ'there!! Also, the file LEVEL1.DAT is the level data file. It's in ASCII so youπ'could edit it with EDIT, just like the levels in my Spinball Game.π                            π DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2π SUB V1:OPEN "O",1,"SCROLL.ZIP",4^6:Z&=1758:?STRING$(50,177);πU"%up()%9%'%R-%,K&]ELx<jy((.%%M/%%%/%%%%xh%wtqq%SgfxN&%<>\r]5w5]=πU"N=H*b/E^nSnKTdj6d)G##ys;1QV>Tuwd&AXC1JUYd%$3yrf2h65C3HZlwL;DE$kπU"oWBaEWD30.TC1=T=h]JLPtid1VwVUe)f-^j7Kv-:o,iprN7A/b&Xx>ajC+=$WWfπU"Bb&q,7,m,InRuwvSq+Sbj(NYFt3f1><F,4]i>Th.Bos/ksP<p>&X)iK-2o9_W83πU"/7-?X\F<=6<r)ul_04iBK^e*'&IGOe0_l,o'?.[FOj-12NrZ[+rUg,Zh:?b#B.CπU"+2w4'oPx2jFb9DAhvD>v/0Ye1M%A5k_#TDX4f)oxIwhWuCVpV5VuYi6Uz=;Ad8HπU"aqji)T<NX[>3o(.2QQn5z-/uHlVCnumCjEuL]jdEC-r=up*ob?48t^V(*tVtQ<UπU"?J5^:b)%^lbnY>YwNq0ky[JVAT_RwZT%%i6PV=<b_7zKBooRNrB)eC:qNSS./poπU"+2&1YWo=u\xkIY-&_NTIK,L=bIq<Pn;XYT)):t9%6BSoY\_gFsVJ3Ol0/trpt&cπU"7H4ikOb[KQ5*zGM6zv>]37zmDB.7OzhL^&jN+^ev[rM&Un1nm9xu+RjT]qY9W]OπU"h6;?V[u\#cs2u)F-P),91?K?=1ha6b(>7Wm25\?r[C<KTcB]>/Q'FE03m3\)D(XπU"^aJ?hXDi%C4/YlFU??;?D0bi\8](*X/)N$Yu.Qn-qx)v%WEhso\(eQ=[6fG?[kVπU"GQJ_/EE:Ja>t1Bd1:^ahtgp_Bs=hb/NK*-4\;wBJ2Ut4+1Z)6#x9VrE8^bVp6nJπU")?6Ic,?MvEQ60%A_N3my]6OO3EPb:Xb%tVUzFLGO)V8]C&Z$9eDBDL1$KT\GY:eπU"8RF.viBOPGEIb#s't';#?9mn7CUrAUYT,=D<9\3\ch*p[h)23:M[oe>bupdaC>*πU"i_m*\??tO1keD2+cST-'<I+(K1$I;9+XQyBCoyCGgK[?i663<$2G>Cz]lM9$]DKπU"qxIgDyeH+lb+%]TcbuqmWL/BDRW,^6/*cJfxQ.gtt2axS4-XD=qMDu+Nq:Ug33LπU"N&igTokKr$=HEBCv0Sv-'&?BQKrq$4]&Lt.[JLBo*Af0a?[m-+MOcriYj0*VY='πU"U0\2Tv_;Yf6IS3_0d9?Omq_gn9Xx?D6jiQI/&>7gXI[bLH\g8dH48Khx8NpXn1VπU"vexp\Iqm:Qcm4RthN(6_nN]VkxEn+Aidu%p()9%%'%-I%NI]FEoL9&?u&%%%H+%πU"%%,%%%%gqp%SvuhB^wf=]=U-5alkDs;Td^?KDg?7Z(ftnrLO:?WWdSJ\$[&HaU<πU"78sbWXKJ4tHOCi:2O4bNO+$U%UARvM65e6\<YBJJZjFIX&b>#8N*j=5>uiYwV8EπU"*ud7ZG[(%&o^-#k5W[Qi51<IP2O#KgSUCn)iz,hZ&6$k;jdp$4$%1\dc49LY)sTπU"cCuKUG*MyEw8ol20Aywz];UmN\FFpZ]U5IH093KuV/ns&<8=7cSG_N/BAgt*%blπU"'w).al,Nd;Od?1&8\(00cAC#Bg=sdHiR4A0=q#)bWNFFS8Z^t1NRLAE2ijm?2I)πU"8J((;I5\o4WQOtlh\=W:L5L2G#qB[O,4T%C_NjqGL\OveGl=2;=(J*tt.HS9)nQπU"[N4<#,AhXm=:dchH7j;wpALI.-jmX3KuNSm_j?K(xQ2,^NCubsqw9sqP4%up()%πU"9%'%#-%HLS]EFB7HQ(%7%%<1%%%/%%%%qj&%jqV%Sify-fOV3&TE1+6YVS$]m%1πU"kd78(4u5>Jl?X^>e#y5DcK-1SN:V1K4.0=\[n9W,N8nzTjC#zK;\iG4k_pHeESBπU"c+-W=a6/H'ppq;lgku0G(-T=v[%Sfa:<H6g57EZZ^/96>t,hd4TNq?dsb,Y2(Y:πU"Ox2M0f$-.0QcvA.1ZO>=R34X^>w9wit;g6nqBFZlbK.bAG#hC>gSKm(H/v4nQPuπU"N1GG<#-+LW4u%p&'9%%9%'[%-%,)K]ELjxjy(#(%%M%/%%/%%%%%%%%%&%%E%%%πU"%%%%%%xhw%tqqS%gfxu%p&'9%%9%'%%-%N_I]Eo1L9?u%&%%H%+%%,%%%%%%%%%πU"&%%E%%+%P(%%%gqp%Svuh%up&'%9%9%%'%-%1HL]E*FBHQ'(%%%'<1%%%/%%%%%πU"%%%%&%E%%%%q*%%%qj&%jqV%Sify%up*+%%%%%%(%(%&t%%%%H+%%%%%π END SUBπ CLOSE:IF S=78AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!π SUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32π IF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1π S=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπJoshua Dickerson               TETRIS (TEXT MODE)             FidoNet QUIK_BAS Echo          04-23-96 (00:00)       QB, QBasic, PDS        177  8463     TETRIS.BAS  '               ███████ ██████ ███████ ████   █████  ████π'                  █    █         █    █   █    █   █π'                  █    ████      █    ████     █    ███π'                  █    █         █    █   █    █       █π'                  █    ██████    █    █    █ █████ ████π'π' π'To win,Guide your Piece down the pit and form strait horzontal lines.π'on A-Type you must make 24 Lines.On B-Type you must make 100.On B-typeπ'Every ten lines you pass a level.Turn on NUM-LOCKπ'π'Keys:π' rotate pieceπ'   4 ─5─ 6π'      │π'      2π'Press SHIFT+F5 to playπ'By Joshua Dickersonπ'π'PROGRAMMER'S LOG: 4/23/96 -> I am updating this program for faster execution,π'                             effieciency, and readibility.ππCLS : RANDOMIZE TIMER: DIM Stat(7), Block$(7, 4), B$(4): WIDTH 40πFOR i = 1 TO 7: READ Plength(i): NEXT: FOR i = 1 TO 7: FOR J = 1 TO Plength(i)πREAD Block$(i, J): NEXT: NEXTπPRINT "Use Number Pad to select.Press ENTER to play": PRINTπPRINT " Type:              Level:"πPRINT "┌───────┐          ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐"πPRINT "│>A-Type│          │"; : COLOR 0, 7: PRINT "0"; : COLOR 7, 0πPRINT "│1│2│3│4│5│6│7│8│9│": PRINT "│ B-Type│          └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘"πPRINT "└───────┘           Hieght": LOCATE 9, 20: PRINT "┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐"πLOCATE 10, 20: PRINT "│0│1│2│3│4│5│6│7│8│9│"πLOCATE 11, 20: PRINT "└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘": Type$ = "A-Type": LOCATE 6, 20πWHILE A$ <> CHR$(13): A$ = INKEY$πIF A$ <> "" THEN LOCATE ASC(Type$) + -59, 2: PRINT " ": LOCATE 6, level * 2 + 21: PRINT USING "#"; levelπIF A$ = "8" THEN Type$ = "A-Type"πIF A$ = "2" THEN Type$ = "B-Type"πIF A$ = "4" AND level > 0 THEN level = level - 1πIF A$ = "6" AND level < 9 THEN level = level + 1πLOCATE ASC(Type$) + -59, 2: PRINT ">": COLOR 0, 7: LOCATE 6, level * 2 + 21πPRINT USING "#"; level: COLOR 7, 0: WEND: IF Type$ = "B-Type" THEN GOTO DisplayπA$ = "": lines = 24: WHILE A$ <> CHR$(13): A$ = INKEY$πIF A$ <> "" THEN LOCATE 10, Hieght * 2 + 21: PRINT USING "#"; HieghtπIF A$ = "4" AND Hieght > 0 THEN Hieght = Hieght - 1πIF A$ = "6" AND Hieght < 9 THEN Hieght = Hieght + 1πLOCATE 10, Hieght * 2 + 21: COLOR 0, 7: PRINT USING "#"; Hieght: COLOR 7, 0πWENDπDisplay: top = 10000πCOLOR 7, 0: CLS : PRINT Type$: PRINT "┌──────────┐"πPRINT "│Statistics│": FOR i = 1 TO 19: PRINT "│          │": NEXTπPRINT "└──────────┘": FOR i = 1 TO 7: LOCATE 1 + i * 3, 8: PRINT "-  0"πFOR J = 1 TO Plength(i): LOCATE J + 3 * i, 2: PRINT Block$(i, J): NEXT: NEXTπFOR J = 2 TO 21: LOCATE J, 15: PRINT "█          █": NEXT: LOCATE 22, 15πPRINT "████████████": LOCATE 1, 16: PRINT "Lines -"; lines: LOCATE 2, 33πPRINT "┌──────┐": FOR i = 3 TO 6: LOCATE i, 33: PRINT "│      │": NEXTπLOCATE 7, 33: PRINT "└──────┘": LOCATE 3, 34: PRINT "Top:": LOCATE 4, 34πPRINT USING "######"; top: LOCATE 5, 34: PRINT "Score:": LOCATE 6, 34πPRINT "     0": LOCATE 8, 35: PRINT "┌────┐": LOCATE 9, 35: PRINT "│Next│"πFOR i = 1 TO 4: LOCATE 9 + i, 35: PRINT "│    │": NEXT: LOCATE 14, 35πPRINT "└────┘": LOCATE 15, 34: PRINT "┌─────┐": LOCATE 16, 34: PRINT "│Level│"πLOCATE 17, 34: PRINT "│ "; USING "##"; level; : PRINT "  │": LOCATE 18, 34πPRINT "└─────┘": NextBlock = 7: NextBlockColor = 1πIF Type$ = "B-Type" THEN GOTO SelectPieceπLOCATE 20, 33: PRINT "┌──────┐": LOCATE 21, 33: PRINT "│Hieght│"πLOCATE 22, 33: PRINT "│  "; USING "##"; Hieght; : PRINT "  │": LOCATE 23, 33πPRINT "└──────┘": LOCATE 22 - Hieght: FOR i = 1 TO Hieght: FOR J = 1 TO 10πLOCATE 22 - i, 15 + JπIF INT(2 * RND(1)) = 1 THEN COLOR INT(15 * RND(1)) + 1: PRINT "█";πNEXT: NEXTπSelectPiece: Collided = 0: Block = NextBlock: BlockColor = NextBlockColorπPbegin = Plength(Block) + 1: row = 1: col = 5πFOR i = 1 TO LEN(Block$(Block, Pbegin - 1)): A$ = MID$(Block$(Block, Pbegin - 1), i, 1)πA = SCREEN(2, 19 + i): IF A = 219 AND A$ = "█" THEN gameover = 1πNEXT: Stat(Block) = Stat(Block) + 1: LOCATE 1 + Block * 3, 9πPRINT USING "###"; Stat(Block): NextBlock = INT(7 * RND(1)) + 1πNextBlockColor = INT(15 * RND(1)) + 1: COLOR NextBlockColor: FOR i = 1 TO 4πLOCATE 9 + i, 36: PRINT "    ": NEXT: FOR i = 1 TO Plength(NextBlock)πLOCATE 9 + i, 36: PRINT Block$(NextBlock, i): NEXT: GOSUB DropPieceπWHILE INKEY$ <> "": WENDπMainLoop:πIF gameover THENπ   FOR i = 40 TO 10 STEP -.5π      SOUND INT(10 * i * RND) + 100, .1π   NEXTπ   FOR i = 21 TO 2 STEP -1π      LOCATE i, 16π      PRINT "▀▀▀▀▀▀▀▀▀▀"π   NEXTπ   ENDπEND IFπIF lines < 1 AND Type$ = "A-Type" THEN LOCATE 12, 17: PRINT "Sucsess!": ENDπIF lines > 99 AND Type$ = "B-Type" THEN LOCATE 12, 17: PRINT "Sucsess!": ENDπt = TIMER: WHILE c$ <> "2" AND TIMER < t + ((10 - level) / 10)πc$ = INKEY$: IF c$ = "4" THEN x = -1: GOSUB MovePieceπIF c$ = "6" THEN x = 1: GOSUB MovePieceπIF c$ = "5" THENπcollision = 0: FOR i = 1 TO 4: B$(i) = "": NEXT: K = 0πFOR i = LEN(Block$(Block, 1)) TO 1 STEP -1: K = K + 1πFOR J = 1 TO Plength(Block): A$ = MID$(Block$(Block, J), K, 1)πB$(i) = B$(i) + A$: NEXT: NEXT: Ptemp = LEN(Block$(Block, 1))πPend = row + Plength(Block) - PbeginπIF Ptemp > Pend THEN Pbtemp = Ptemp - (Pend - 1): Rtemp = 1πIF Ptemp <= Pend THEN Pbtemp = 1: Rtemp = Pend - (Ptemp - 1)πAction = 1: GOSUB DisplayPiece: K = 0: FOR i = Pbtemp TO Ptemp: K = K + 1πFOR J = 1 TO LEN(B$(1)): A$ = MID$(B$(i), J, 1)πA = SCREEN(Rtemp + K, col + J + 14): IF A = 219 AND A$ = "█" THEN collision = 1πNEXT: NEXT: IF col + LEN(B$(1)) > 11 THEN collision = 1πIF collision = 1 THEN Action = 2: GOSUB DisplayPiece: GOTO MainLoopπPlength(Block) = Ptemp: FOR i = 1 TO Ptemp: Block$(Block, i) = B$(i): NEXTπPbegin = Pbtemp: row = Rtemp: Action = 2: GOSUB DisplayPieceπSOUND 900, .3πEND IF: WEND: c$ = "": GOSUB CheckForCollisionπIF Collided = 0 THEN GOSUB DropPiece ELSE SOUND 100, 1: GOSUB EraseLine: GOTO SelectPieceπGOTO MainLoopππCheckForCollision: Collided = 0: K = 0πIF Pbegin <> 1 THEN Pbegin = Pbegin - 1: row = 0πIF row + Plength(Block) = 21 THEN Collided = 1: RETURNπFOR i = Pbegin TO Plength(Block): K = K + 1: FOR J = 1 TO LEN(Block$(Block, 1))πA = SCREEN(row + K + 1, col + J + 14): A$ = MID$(Block$(Block, i), J, 1)πB$ = " ": IF i < Plength(Block) THEN B$ = MID$(Block$(Block, i + 1), J, 1)πIF A = 219 AND A$ = "█" AND B$ = " " THEN Collided = 1πNEXT: NEXT: IF row < 1 THEN row = 1: Pbegin = Pbegin + 1πRETURNππMovePiece: collision = 0: IF col = 1 AND x = -1 THEN RETURNπIF col + LEN(Block$(Block, 1)) = 11 AND x = 1 THEN RETURNπFOR i = 1 TO LEN(Block$(Block, 1)): K = 0: FOR J = Pbegin TO Plength(Block)πK = K + 1: A = SCREEN(row + K, col + i + 14 + x)πA$ = MID$(Block$(Block, J), i, 1): B$ = " "πIF i > 1 AND x = -1 THEN B$ = MID$(Block$(Block, J), i - 1, 1)πIF i < LEN(Block$(Block, 1)) AND x = 1 THEN B$ = MID$(Block$(Block, J), i + 1, 1)πIF A = 219 AND A$ = "█" AND B$ = " " THEN collision = 1πNEXT: NEXT: IF collision = 1 THEN RETURNπAction = 1: GOSUB DisplayPiece: col = col + x: Action = 2: GOSUB DisplayPieceπSOUND 1000, .3: RETURNππDropPiece: Action = 1: GOSUB DisplayPiece: row = row + 1πIF Pbegin > 1 THEN Pbegin = Pbegin - 1: row = 1πAction = 2: GOSUB DisplayPiece: RETURNππDisplayPiece:πCOLOR BlockColorπK = 0πFOR i = Pbegin TO Plength(Block): K = K + 1πFOR J = 1 TO LEN(Block$(Block, 1))π   IF MID$(Block$(Block, i), J, 1) <> " " THENπ      LOCATE row + K, col + J + 14π      IF Action = 1 THEN PRINT " ";  ELSE PRINT CHR$(219);π   END IFπNEXT: NEXT: RETURNππEraseLine: K = 0: add = 500: FOR i = Pbegin TO Plength(Block): K = K + 1πCheck = 0: FOR J = 1 TO 10: Check = Check + SCREEN(row + K, J + 15): NEXTπIF Check = 2190 THENπFOR n = 1 TO 20: SOUND INT(500 * RND) + 100, .1: NEXTπFOR l = row + K TO 3 STEP -1: FOR m = 1 TO 10πCOLOR SCREEN(l - 1, m + 15, 1): LOCATE l, m + 15πPRINT CHR$(SCREEN(l - 1, m + 15)): NEXT: NEXT: LOCATE 2, 16πPRINT "          ": score = score + add: add = add * 2πIF Type$ = "A-Type" THEN lines = lines - 1πIF Type$ = "B-Type" THEN lines = lines + 1: IF INT(lines / 10) > level THEN level = INT(lines / 10)πLOCATE 17, 36: PRINT level: LOCATE 1, 23: PRINT lines: LOCATE 6, 34πPRINT USING "######"; scoreπEND IF: NEXT: RETURNπ'Game A:πDATA 2,2,2,2,2,2,1,"███"," █ ","███","  █","██ "," ██","██","██"," ██","██ "πDATA "███","█  ","████"ππ'Game B:π'DATA 2,1,2,2,2,2,1,"███ "," ███","█ █"," █","█ ","█  ","  █"," █ ", "███","  █"π'DATA "█  ", "████"ππ'Game C:π'DATA 2,2,2,2,2,2,1,"█ █"," █ ","  ██","██  ","█  █","████","█ █","█ █","██"π'DATA " █"," ██ ","████","████"ππEarl L. Montgomery             320X400 SCREEN MODE            FidoNet QUIK_BAS Echo          02-23-96 (17:48)       QB, QBasic, PDS        93   3408     320X400.BAS 'The following post is a program I wrote called 320X400.BAS. It demonstratesπ'how to set up SCREEN 13 320X400X256 mode. It is bare bones. No save or loadπ'routines, other than the routine that saves the screen prior to displaying theπ'HELP menu.If you want to expand on this program please do so! Press H once theπ'program is started for the HELP menu.ππsetmode:π 'Sets SCREEN 13 to the 320X400X256 modeπ SCREEN 13: DEF SEG = &HA000π KEY(10) ONπ ON KEY(10) GOSUB endofprogramπ OUT &H3D4, 9: OUT &H3D5, &H40: OUT &H3D4, 20: OUT &H3D5, 0: OUT &H3D4, 23π OUT &H3D5, &HE3: OUT &H3C4, 4: OUT &H3C5, &H6π OUT &H3C4, 2: OUT &H3C5, 15: CLS : 'rem this clears (CLS) all 4 planesπ IF flag$ = "restart" THEN GOTO loadtempπ OUT &H3C4, 2: OUT &H3C5, 1πbegin:π position% = 15318: c = 15: plane% = 1: OUT &H3C4, 2: OUT &H3C5, 1πrestart:π flag$ = ""π POKE position%, cπwaitkey1:π i$ = INKEY$: IF i$ = "" THEN GOTO waitkey1π i$ = UCASE$(i$)π keycode% = CVI(i$ + CHR$(0))π IF keycode% = 19712 THEN GOTO moverightπ IF keycode% = 19200 THEN GOTO moveleftπ IF keycode% = 18432 THEN GOTO moveupπ IF keycode% = 20480 THEN GOTO movedownπ IF i$ = "C" THEN GOTO changecolorπ IF i$ = "H" THEN GOTO helpscreenπ IF i$ = "X" THEN GOTO clearscreenπ GOTO waitkey1πmoveright:π IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO pokescrnπ IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4: GOTO pokescrnπ IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: GOTO pokescrnπ IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: position% = position% + 1πpokescrn: IF position% > 31999 THEN position% = 31999π POKE position%, cπ GOTO waitkey1πmoveleft:π IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: position% = position% - 1: GOTO doitπ IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: GOTO doitπ IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO doitπ IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4:πdoit:π IF position% < 0 THEN position% = 0π POKE position%, cπ GOTO waitkey1πmoveup:π position% = position% - 80π IF position% < 0 THEN position% = position% + 80π POKE position%, cπ GOTO waitkey1πmovedown:π position% = position% + 80π IF position% > 32000 THEN position% = position% - 80π POKE position%, cπ GOTO waitkey1πchangecolor:π c = c + 1π IF c > 255 THEN c = 0π POKE position%, cπ GOTO waitkey1π GOTO waitkey1πhelpscreen:π 'Saving screen before switching to SCREEN 9 and the HELP MENUπ DEF SEG = &HA000π OUT &H3CE, 4: OUT &H3CF, 0: BSAVE "temp1.bin", 0, 32000π OUT &H3CE, 4: OUT &H3CF, 1: BSAVE "temp2.bin", 0, 32000π OUT &H3CE, 4: OUT &H3CF, 2: BSAVE "temp3.bin", 0, 32000π OUT &H3CE, 4: OUT &H3CF, 3: BSAVE "temp4.bin", 0, 32000π SCREEN 9: CLSπ PRINT "Key             Function"π PRINT "Use arrow keys to move cursor"π PRINT "C               Changes current color"π PRINT "F10             Exit Program "π PRINT "H               Help (This Screen)"πwaitkey2:π i$ = INKEY$: IF i$ = "" THEN GOTO waitkey2π CLS : flag$ = "restart": GOTO setmodeπloadtemp:π OUT &H3C4, 2: OUT &H3C5, 1: BLOAD "temp1.bin"π OUT &H3C4, 2: OUT &H3C5, 2: BLOAD "temp2.bin"π OUT &H3C4, 2: OUT &H3C5, 4: BLOAD "temp3.bin"π OUT &H3C4, 2: OUT &H3C5, 8: BLOAD "temp4.bin"π GOTO restartπclearscreen:π OUT &H3C4, 2: OUT &H3C5, 15: CLS : GOTO beginπendofprogram:π SCREEN 0: CLS : DEF SEG : ENDππThomas Gohel                   SCROLLING OVER VGA-BIOS        alt.lang.basic                 03-03-96 (00:00)       PB                     84   2264     VGASCROL.BAS'**************************************************************************π'π'   Scrolling Windows over VGA-BIOS in PowerBASIC 3.0/3.2π'π'   entwickelt von / developed by   :  Thomas Gohelπ'π'                           Fido    :  Thomas Gohel@2:2410/301.12π'                           InterNet:  author@pbsound.snafu.deπ'                           Homepage:  http://www.snafu.de/~pbsound/π'π'**************************************************************************ππDIM Demo$(25)πVordergrund% = 15πHintergrund% = 1ππ'*** ErklΣrung ***πSHARED Zol%, Sol%, Zur%, Sur%, Anzahl%, ScrollFarbe%ππ'Zol%    = Zeile oben linksπ'Sol%    = Spalte oben linksπ'Zur%    = Zeile unten rechtsπ'Sur%    = Spalte unten rechtsπ'Anzahl% = Anzahl der zu scrollenden Zeilenπππ'*** String fⁿllen ***πDemo$(1) = "---------    Scrolling windows (over VGA-BIOS)   (c) 1994 Thomas Gohel    ----------"πFOR i% = 2 TO 25π    Demo$(i%) = STRING$(80,65+i%)πNEXT i%ππ'*** String auf Bildschirm ausgeben ***πCOLOR VorderGrund%, Hintergrund%πFOR i% = 1 TO 25π    LOCATE i%,1: PRINT Demo$(i%);πNEXT i%ππ'*** jetzt wird gescrollt ****ππFOR i% = 1 TO 11π    DELAY 0.5π    ScrollFarbe% = Vordergrund% + (Hintergrund% * 16)π    ScrollingHoch     8, 10, 18, 35, 1, ScrollFarbe%π    ScrollingHerUnter 8, 47, 18, 72, 1, ScrollFarbe%π    LOCATE 18, 10: PRINT "  --- Scrolling Hoch ---  "π    LOCATE  8, 47: PRINT " -- Scrolling Herunter -- "πNEXT i%ππENDππFUNCTION ScrollingHoch(BYVAL Zol%, BYVAL Sol%, BYVAL Zur%, BYVAL Sur%, BYVAL Anzahl%, BYVAL ScrollFarbe%)ππ        ! mov ah, &h06π        ! mov al, Anzahl%π        ! mov bh, ScrollFarbe%π        ! mov ch, Zol%π        ! dec chπ        ! mov cl, Sol%π        ! dec clπ        ! mov dh, Zur%π        ! dec dhπ        ! mov dl, Sur%π        ! dec dlπ        ! int &h10ππEND FUNCTIONππFUNCTION ScrollingHerunter(BYVAL Zol%, BYVAL Sol%, BYVAL Zur%, BYVAL Sur%, BYVAL Anzahl%, ByVal ScrollFarbe%)ππ        ! mov ah, &h07π        ! mov al, Anzahl%π        ! mov bh, ScrollFarbe%π        ! mov ch, Zol%π        ! dec chπ        ! mov cl, Sol%π        ! dec clπ        ! mov dh, Zur%π        ! dec dhπ        ! mov dl, Sur%π        ! dec dlπ        ! int &h10ππEND FUNCTIONπChad Beck                      PAC-MAN SCREEN SAVER           Kevin Smith                    03-02-96 (00:00)       QB, QBasic, PDS        215  5578     PACSAVE.BAS ' > Here's...my PacMan Screen Saver....ππ'     I love it!ππ' > Anyone have any suggestions as to how I could make it any better?ππ'     Yep.  This could still be much improved, but it's a start (>15Kπ'smaller than the original).  Hopefully you'll find it easier to read andπ'modify too.  Enjoy!ππ' ******************************************************************π' **  KEVIN SMITH  ********  PACMAN.BAS  *********  JAN 14, 1996  **π' ******************************************************************π' **  PURPOSE:  TO CREATE A PAC-MAN SCREEN SAVER THAT WILL GO IN  **π' **            ALL FOUR DIRECTIONS INSTEAD OF ONLY ONE USING     **π' **            DATA FILES INSTEAD OF REDRAWING ALL THE GRAPHICS  **π' **            EACH TIME THE PROGRAM IS RUN.                     **π' ******************************************************************π'                       Optimized by CHuRL 3-2-96ππDEFINT A-Z                                'Use integers onlyππCONST ArraySize = 242, NumGraphics = 21πCONST Delay = 700                         'Set the delay onceπCONST True = -1, False = NOT TrueπDIM Graphic(0 TO ArraySize * NumGraphics)ππSCREEN 7πCLSπRANDOMIZE TIMERππ'GOSUB MakeData                            '!!!ππDEF SEG = VARSEG(Graphic(0))πON ERROR GOTO MakeDataπ  BLOAD "Pacman.DAT", VARPTR(Graphic(0))πON ERROR GOTO 0                           'I promise it won't crashπ                                          ' from here on...πDirection = 1πX = 160πY = 100πDOπ  IF Turns > NumTurns THENπ    Turns = 0π    Direction = INT(RND * 4)π    NumTurns = INT(RND * 7) + 2π  END IFπ  SELECT CASE Directionπ    CASE 0: GOSUB Rightπ    CASE 1: GOSUB Leftπ    CASE 2: GOSUB Down: Y = 199 - Y - 19π    CASE ELSE: GOSUB Upπ  END SELECTπ  Turns = Turns + 1πLOOP UNTIL INKEY$ = CHR$(27)              'Continue until ESC pressedπSCREEN 0πWIDTH 80πENDππRight:π  FOR Frame = 0 TO 6π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF X < 295 THEN X = X + 1π  NEXTπ  FOR Frame = 6 TO 0 STEP -1π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF X < 295 THEN X = X + 1π  NEXTπ  IF X = 295 THEN NumTurns = 0π  RETURNππLeft:π  FOR Frame = 7 TO 13π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF X > 0 THEN X = X - 1π  NEXTπ  FOR Frame = 13 TO 7 STEP -1π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF X > 0 THEN X = X - 1π  NEXTπ  IF X = 0 THEN NumTurns = 0π  RETURNππDown:π  Y = 199 - Y - 19                        '19 = graphic heightπ  WINDOW (0, 0)-(319, 199)                'Inverse coordinatesπUp:π  FOR Frame = 14 TO 20π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF Y > 0 THEN Y = Y - 1π  NEXTπ  FOR Frame = 20 TO 14 STEP -1π    PUT (X, Y), Graphic(Frame * ArraySize), PSETπ    FOR Stall = 0 TO Delay: NEXTπ    IF Y > 0 THEN Y = Y - 1π  NEXTπ  IF Y = 0 THEN NumTurns = 0π  WINDOW SCREEN (0, 0)-(319, 199)         'Return to normalπ  RETURNππMakeData:π  'Right Pac-Peopleπ  'SCREEN 7, , 1, 0                        '!!!π  FOR X = 1 TO 10π    CIRCLE (20, 20), X, 14π    CIRCLE (21, 20), X, 14π  NEXT Xπ  LINE (20, 14)-STEP(2, 1), 0, BF         'Sketch the eyeπ  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 20), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 19), 0π  LINE (20, 20)-(31, 21), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 18), 0π  LINE (20, 20)-(31, 22), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 17), 0π  LINE (20, 20)-(31, 23), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 16), 0π  LINE (20, 20)-(31, 24), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(31, 15), 0π  LINE (20, 20)-(31, 25), 0π  GOSUB SaveGraphicππ  'Left Pac-Peopleπ  FOR X = 0 TO 10π    CIRCLE (20, 20), X, 14π    CIRCLE (21, 20), X, 14π  NEXT Xπ  LINE (20, 14)-STEP(2, 1), 0, BF         'Sketch the eyeπ  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 20), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 19), 0π  LINE (20, 20)-(10, 21), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 18), 0π  LINE (20, 20)-(10, 22), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 17), 0π  LINE (20, 20)-(10, 23), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 16), 0π  LINE (20, 20)-(10, 24), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(10, 15), 0π  LINE (20, 20)-(10, 25), 0π  GOSUB SaveGraphicππ  'Up Pac-Peopleπ  FOR X = 1 TO 10π    CIRCLE (20, 20), X, 14π    CIRCLE (21, 20), X, 14π  NEXT Xπ  LINE (14, 19)-STEP(1, 2), 0, BF         'Sketch the eyeπ  GOSUB SaveGraphicππ  LINE (20, 20)-(20, 10), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(19, 10), 0π  LINE (20, 20)-(21, 10), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(18, 10), 0π  LINE (20, 20)-(22, 10), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(17, 10), 0π  LINE (20, 20)-(23, 10), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(16, 10), 0π  LINE (20, 20)-(24, 10), 0π  GOSUB SaveGraphicππ  LINE (20, 20)-(15, 10), 0π  LINE (20, 20)-(25, 10), 0π  GOSUB SaveGraphicππ  'SCREEN 7, , 0                           '!!!π  'RETURN                                  '!!!ππ  SCREEN 0π  WIDTH 80π  PRINT "CREATING DATA FILE... PLEASE WAIT"π  DEF SEG = VARSEG(Graphic(0))π    BSAVE "Pacman.DAT", VARPTR(Graphic(0)), ArraySize * NumGraphics * 2π  PRINT "DATA FILE CREATED.  YOU MAY NOW RUN THIS PROGRAM AGAIN."π  ENDππSaveGraphic:π  GET (9, 11)-(32, 29), Graphic(Offset)π  Offset = Offset + ArraySizeπ  RETURNπTyler Barnes                   VESA SVGA SCREEN ROUTINES      FidoNet QUIK_BAS Echo          03-10-96 (00:43)       QB, PDS                341  12443    VESA.BAS    '                QuickBasic High Resolution Screen Routinesπ'π'                        By D. Tyler Barnesπ'π'             Works(Hopefully) with any VESA compatible BIOSπ'π'Introπ'~~~~~π'π'        Ok,first of all,I'm not as heavily in to QuickBasic programming asπ'I used to be,so I was a bit lazy writing this. I left a LOT of room forπ'improvement. Second of all,when I WAS in to QuickBasic programming, graphicsπ'was not a specialty. I was more in to communications. The point I'm tryingπ'to make,is that there may be code in this thing that is extraneous,andπ'there may be ways to do what this code is doing a lot faster... Infact,Iπ'KNOW there are ways to make it faster... I'm using the BIOS Write Pixelπ'command in all the graphics commands. It would be much faster done with directπ'writes to video memory.. I'll leave the improvements up to you.π'Just do me a favour and send me your changes so that next time I post this,π'others will recieve these changes. I'll put your name on your code,so don'tπ'worry about me stealing your credit...π'Oh,another weird thing I've done,is I've used InterruptX almost everywhere,π'even in places where INTERRUPT would've worked. As far as I know they areπ'identical anyhow,'cept INTERRUPTX can use more registers... but perhapsπ'I'm wrong. Perhaps INTERRUPT is faster or something. Go ahead and change it.π'π'How to useπ'~~~~~~~~~~π'π'* Before doing anything,make sure you've loaded QuickBasic with theπ'  /L switch.π'* Next detect whether or not the machine has VESA compatibilityπ'* Set the screen modeπ'* Write the program hereπ'* Use the CleanUp commandπ'* Endπ'π'Commands:π'π'Border-This command is used when in text mode,and some graphic modes.π'         It has one integer parameter. Depending what screen mode you're in,π'         and what number you use,this will change the screen colour,theπ'         border,both,or neither. Just mess around with it ...π'         Example Usage:Border 9π'         On my machine,the above will produce a light blue border when inπ'         ScreenMode 3(Basic's SCREEN 0)π'Box-This command will not work in any text modes.(Obviously)π'      It has 5 parameters. 4 to define the box,and the last to define theπ'      colour of the box.π'      Example Usage:Box 10,11,50,51,3π'      The above command would make a box with the left hand corner  on pointπ'      10,11(X,Y) and the bottom right hand corner on 50,51.π'      The last parameter is the colour and will have a different resultπ'      depending on your screen mode.π'CleanUp-This command is used to clean up after the ScreenMode command. Itπ'          should be run before you exit your program. Also,if you haveπ'          allready run ScreenMode once,and you want to change to a newπ'          screen mode,you'll have to run this before doing so. Also,if youπ'          want to stop using these routines,and use BASIC's routines instead,π'          and ScreenMode has allready been used in your program,you'll haveπ'          to run this before using BASIC's SCREEN command.π'          Example Usage:CleanUpπ'CurVidMode-This function will return the current video mode. The numberπ'             returned will not always correspond with the number used in theπ'             ScreenMode command,and will not always correspond with BASIC'sπ'             SCREEN mode. If you want to see what the number returned means,π'             look up AH=00,INT 10h in Ralf Brown's interrupt list.π'             Example Usage:A%=CurVidMode%π'LowHigh-Crappy way of seperating two seperate bytes from a word. If youπ'          don't know what I'm talking about,don't worry about it. The onlyπ'          reason I have this in here at all,is because there are otherπ'          routines in this source that depend on it.π'Pixel-This is like BASIC's PSET command. It plots one pixel on to theπ'        display. There are three parameters. Two for the X,Y coordinates ofπ'        the dot,and one for the colour.π'        Example Usage:Pixel 5,10,2π'        The above command would plot a pixel at 5,10(X,Y) with a colourπ'        value of 2.π'        This command will not work in text modes.π'        Pixel Positions start at 0,0.π'ScreenMode-This is used to switch between the screen modes. Please lookπ'             up the CLEANUP command after reading this explanation.π'             This command has one parameter;the screen mode.π'             Example Usage:ScreenMode 3π'             The above command would switch the computer into 80x25x16 textπ'             mode.(80 columns,25 rows,16 colours)π'             So that you don't have to remember all the numbers,I built inπ'             a bunch of constants to use for the more common modes. Of course,π'             there are always modes I left out that may work,so experiment.π'             If you find a mode that you want to use,try it on more thanπ'             one machine to make sure that the mode you've selected isπ'             fairly compatible. Oh,and be careful. I've heard that withπ'             older equipment,you can actually fry your monitor by going intoπ'             certain unsupported modes.π'VesaSupported-This function is used to detect whether or not the machineπ'                that the program is running on has VESA compatibility.π'                Example Usage:IF VesaSupported THENπ'                          Ie2:IF NOT VesaSupported THENππDECLARE SUB Box (TopX%, TopY%, BottomX%, BottomY%, Colour%)πDECLARE SUB Pixel (X%, Y%, Colour%)πDECLARE SUB Border (Colour%)πDECLARE FUNCTION Curvidmode% ()πDECLARE FUNCTION Readpixel% (Column%, Row%)πDECLARE SUB Cleanup ()πDECLARE SUB Tlocate (Y%, X%)πDECLARE SUB Tcolour (ForeGround%, BackGround%)πDECLARE SUB ScreenMode (MODE%)πDECLARE FUNCTION Vesasupported% ()πDECLARE SUB LowHigh (Register%, low%, High%)ππTYPE SVGAπ    Sig AS STRING * 4π    Version AS INTEGERπ    OEMPtr AS LONGπ    Capibilities AS STRING * 4π    ListPtr AS LONGπ    VidMem AS INTEGERπ    Reserved AS STRING * 262πEND TYPEππ'$INCLUDE: 'QB.BI'πDIM SHARED Inregx AS RegTypeX, Outregx AS RegTypeXπCONST GM640x400x256 = &H100, GM640x480x256 = &H101, GM800x600x16 = &H102πCONST GM800x600x256 = &H103, GM1024x768x16 = &H104, GM1024x768x256 = &H105πCONST TM80X25 = 3πCLSπIF NOT Vesasupported THENπ    PRINT "Fatal Error: VESA was not detected."πEND IFπ'Y=0 to 767π'X=0 to 1023πScreenMode GM1024x768x256πColour = -.5πFOR X% = 0 TO 1023π    Colour = Colour + .5π    IF INT(Colour) > 255 THEN Colour = -.5π    FOR Y% = 0 TO 767π       Pixel X%, Y%, INT(Colour)π    NEXT Y%π    IF LEN(INKEY$) > 0 THEN GOTO HereπNEXT X%ππHere:πBox 50, 50, 390, 590, 2πWHILE INKEY$ = "": WENDπ    CleanupπDEFINT A-ZππDEFSNG A-ZπSUB Border (Colour%)π    DIM inreg AS RegType, outreg AS RegTypeπ    'In Text mode(3) you can only set the border colour.π    'With some video modes this will also modify the background colourπ    'With other video modes,this may not work at all.π    IF Colour% > 255 THEN Colour% = 255π    IF Colour% < 0 THEN Colour% = 0π    inreg.AX = &HB00π    inreg.BX = Colour%π    CALL INTERRUPT(&H10, inreg, outreg)πEND SUBππDEFINT A-ZπSUB Box (TopX, TopY, BottomX, BottomY, Colour%)π    FOR I% = TopX TO BottomX STEP 1π       Pixel I%, TopY, Colour%π       Pixel I%, BottomY, Colour%π    NEXT I%π    FOR I% = TopY TO BottomY STEP 1π       Pixel BottomX, I%, Colour%π       Pixel TopX, I%, Colour%π    NEXT I%πEND SUBππSUB Cleanupπ    SHARED StartingModeπ    Inregx.AX = StartingModeπ    CALL interruptx(&H10, Inregx, Outregx)πEND SUBππDEFSNG A-ZπFUNCTION Curvidmode%π    DEF SEG = &H40π    Curvidmode% = PEEK(&H49)π    DEF SEGπEND FUNCTIONππDEFINT A-ZπSUB GPrint (Text$)π    SHARED Col%π    Inregx.AX = &H300π    CALL interruptx(&H10, Inregx, Inregx)π    Inregx.AX = &H1301π    Inregx.BX = Col%π    Inregx.CX = LEN(Text$)π    Inregx.ES = VARSEG(Text$)π    Inregx.BP = SADD(Text$)π    CALL interruptx(&H10, Inregx, Outregx)πEND SUBππDEFSNG A-ZπSUB LowHigh (Register%, low%, High%)π    Full$ = HEX$(Register%)π    IF LEN(Full$) < 4 THENπ       WHILE LEN(Full$) < 4: Full$ = "0" + Full$: WENDπ       END IFπ       low% = VAL("&H" + RIGHT$(Full$, 2))π       High% = VAL("&H" + LEFT$(Full$, 2))πEND SUBππSUB Makecircle (X%, Y%, Rad, Colour%)π    FOR I = 0 TO 6.4 STEP .005π       Pixel INT(Rad * COS(I)) + X%, INT(Rad * SIN(I)) + Y%, Colour%π    NEXT IπEND SUBππDEFINT A-ZπSUB MakeLine (A, B, C, D, Colour%)π    U = C - A: v = D - B: Param = U: GOSUB Sign: D1X = Signπ    Param = v: GOSUB Sign: D1Y = Sign: Param = U: GOSUB Sign: D2X = Signπ    D2Y = 0: m = ABS(U): N = ABS(v)π    IF m <= N THENπ       D2X = 0: Param = v: GOSUB Sign: D2Y = Sign: m = ABS(v): N = ABS(U)π    END IFπ    S% = m / 2π    FOR I% = 0 TO mπ       Pixel A, B, Colour%: S% = S% + Nπ       IF S% >= m THENπ          S% = S% - m: A = A + D1X: B = B + D1Yπ       ELSEπ          A = A + D2X: B = B + D2Yπ       END IFπ    NEXT I%π    EXIT SUBπSign:π    SELECT CASE Paramπ       CASE IS > 0: Sign = 1π       CASE IS < 0: Sign = -1π       CASE 0: Sign = 0π    END SELECTπ    RETURNπEND SUBππDEFSNG A-ZπSUB Pixel (X%, Y%, Colour%)π    DIM inreg AS RegType, outreg AS RegTypeπ    C$ = HEX$(Colour%)π    LC% = LEN(C$)π    IF LC% < 2 THEN C$ = "0" + C$π    IF LC% > 2 THEN C$ = LEFT$(C$, 2)π    inreg.AX = VAL("&HC" + C$)π    inreg.BX = &H0π    inreg.DX = Y%π    inreg.CX = X%π    CALL INTERRUPT(&H10, inreg, outreg)πEND SUBππDEFINT A-ZπFUNCTION Readpixel (Column, Row)π    Inregx.AX = &HD00π    Inregx.BX = 0π    Inregx.CX = Columnπ    Inregx.DX = Rowπ    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, RP, Junkπ    Readpixel = RPπEND FUNCTIONππSUB ScreenMode (MODE%)π    SHARED StartingModeπ    Inregx.AX = &HF00π    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, StartingMode, Columnsπ    Inregx.AX = &H4F03π    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, Support, Statusπ    IF Status <> 0 OR Support <> &H4F THEN ERROR (5)π    StartingVesaMode = Outregx.BXπ    Inregx.AX = &H4F02π    Inregx.BX = MODE%π    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, Support, Statusπ    IF Support <> &H4F OR Status <> 0 THEN ERROR (5)π    Inregx.AX = &HF00π    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, EndResult, Columnsπ    Inregx.AX = &H4F02π    Inregx.BX = StartingVesaModeπ    CALL interruptx(&H10, Inregx, Outregx)π    IF Support <> &H4F OR Status <> 0 THEN ERROR (5)π    Inregx.AX = EndResultπ    CALL interruptx(&H10, Inregx, Outregx)π    Tcolour 7, 0: Tlocate 1, 1πEND SUBππSUB Tcolour (ForeGround, BackGround)π    SHARED Col%π    T$ = HEX$(ForeGround): T2$ = HEX$(BackGround)π    IF LEN(T$) > 1 OR LEN(T2$) > 1 THEN ERROR (5)π    Col% = VAL("&H" + T2$ + T$)πEND SUBππSUB Tlocate (Y, X)π    Y = Y - 1: X = X - 1π    Y$ = HEX$(Y): X$ = HEX$(X)π    IF LEN(Y$) > 2 OR LEN(X$) > 2 THEN ERROR (5)π    IF LEN(Y$) < 2 THEN Y$ = "0" + Y$π    IF LEN(X$) < 2 THEN X$ = "0" + X$π    Inregx.AX = &H200π    CurLoc% = VAL("&H" + Y$ + X$)π    Inregx.DX = CurLoc%π    CALL interruptx(&H10, Inregx, Outregx)π    X = X + 1: Y = Y + 1πEND SUBππFUNCTION Vesasupportedπ    DIM VInfoBuff AS SVGAπ    Inregx.AX = &H4F00π    Inregx.ES = VARSEG(VInfoBuff)π    Inregx.di = VARPTR(VInfoBuff)π    CALL interruptx(&H10, Inregx, Outregx)π    LowHigh Outregx.AX, Support, Statusπ    IF UCASE$(VInfoBuff.Sig) <> "VESA" OR Support <> &H4F OR Status <> 0 THENπ       Vesasupported = 0π    ELSEπ       Vesasupported = -1π    END IFπEND FUNCTIONππ'Oh, that's it. And after all that commenting, I still neglected to say a fewπ'things. First of all, if you try to switch to a screen mode that isn'tπ'supported by your computer, most of the time it will give you an Illegalπ'Function Call... Of course there are a few modes that won't be detected asπ'invaid, they'll just freeze the machine or something not so nice.π'Also, In the VesaDetection function I'm using a TYPE instead of just a largeπ'set-length string... a large set length string would eliminate the TYPE stuffπ'at the top of the file, but I put it the way i did incase someone wanted toπ'use the info to add stuff. After all this time I've wasted talking abut thisπ'thing, I sure hope it works... <G> .. I still haven't tested it on any machineπ'but my own.L8r,π'D. Tyler BarnesπManny Najera                   QBASIC FADING ROUTINE          www.flashgames.com             03-09-96 (23:20)       QB, QBasic, PDS        108  2531     QBFADE.BAS  'QBasic FADEing - The real thing.π'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~π'From Manny Najera of Flash Gamesπ'--------------------------------π'   http://www.flashgames.comπ'--------------------------------ππ'How To Use This Stuffπ'---------------------π'To fade out, just use PALETTE.FADEOUT.π'PALETTE.FADEIN will work after you fadeout.π'If you mess around with the pData array inπ'between, it won't work correctly.  All theπ'other subs you don't have to worry about.π'The FLICKERING?  Its not as bad as before.π'Live with it.  It happens to the best of us.π'Use this code NOW!  I'm tired of looking atπ'those fake fades.ππDEFINT A-Zππ'Just add this into your program.π'---------------------------------πTYPE PaletteTypeπRed AS INTEGERπGreen AS INTEGERπBlue AS INTEGERπEND TYPEπDECLARE SUB Palette.Set (nColor%, pInfo AS PaletteType)πDECLARE SUB Palette.Get (nColor%, pInfo AS PaletteType)πDECLARE SUB Palette.Fadeout ()πDECLARE SUB Palette.FadeIn ()πDIM SHARED Pal AS PaletteTypeπDIM SHARED pData(0 TO 255, 1 TO 3)π'---------------------------------ππSCREEN 13πFOR I = 0 TO 200πLINE (0, I)-(319, I), IπNEXT IπSLEEPπPalette.FadeoutπSLEEPπPalette.FadeInππSUB Palette.FadeInπDIM tT(1 TO 3)πFOR I = 1 TO 64πWAIT &H3DA, 8π  FOR O = 0 TO 255π    Palette.Get O, Palπ    tT(1) = Pal.Redπ    tT(2) = Pal.Greenπ    tT(3) = Pal.Blueπ    IF tT(1) < pData(O, 1) THEN tT(1) = tT(1) + 1π    IF tT(2) < pData(O, 2) THEN tT(2) = tT(2) + 1π    IF tT(3) < pData(O, 3) THEN tT(3) = tT(3) + 1π    Pal.Red = tT(1)π    Pal.Green = tT(2)π    Pal.Blue = tT(3)π    Palette.Set O, Palπ  NEXT OπNEXT IππEND SUBππSUB Palette.FadeoutπDIM tT(1 TO 3)πFOR I = 0 TO 255π  Palette.Get I, Palπ  pData(I, 1) = Pal.Redπ  pData(I, 2) = Pal.Greenπ  pData(I, 3) = Pal.BlueπNEXT IπFOR I = 1 TO 64πWAIT &H3DA, 8π  FOR O = 0 TO 255π    Palette.Get O, Palπ    tT(1) = Pal.Redπ    tT(2) = Pal.Greenπ    tT(3) = Pal.Blueπ    IF tT(1) > 0 THEN tT(1) = tT(1) - 1π    IF tT(2) > 0 THEN tT(2) = tT(2) - 1π    IF tT(3) > 0 THEN tT(3) = tT(3) - 1π    Pal.Red = tT(1)π    Pal.Green = tT(2)π    Pal.Blue = tT(3)π    Palette.Set O, Palπ  NEXT OπNEXT IπEND SUBππSUB Palette.Get (nColor%, pInfo AS PaletteType)πOUT &H3C6, &HFFπOUT &H3C7, nColor%πpInfo.Red = INP(&H3C9)πpInfo.Green = INP(&H3C9)πpInfo.Blue = INP(&H3C9)πEND SUBππSUB Palette.Set (nColor%, pInfo AS PaletteType)πOUT &H3C6, &HFFπOUT &H3C8, nColor%πOUT &H3C9, pInfo.RedπOUT &H3C9, pInfo.GreenπOUT &H3C9, pInfo.BlueπEND SUBππDavid Carlton                  3D-VR MAZE WARS                pvhsa07@ll.kcts.org            03-09-96 (23:31)       QB, QBasic, PDS        429  12815    MAZEWARS.BASREM   Alpha version of VR Maze Wars (working title) by David CarltonπREM   Hard Core Software  Copyright 1995ππREM   This is the alpha version of my game! Basically it's a super slowπREM   qbasic version of my program only allowing you to wander around aπREM   small room. This actually looks barely anything like the actual gameπREM   will. This has clear walls and no hit detection for the objects inπREM   the center of the room. Also, because this has no object sorting,πREM   close walls will dissapear. Of course the worst thing about the alphaπREM   is how terribly slow it runs in non-compiled qbasic. Most of the timeπREM   you will have to wait about 5 seconds for each frame to be drawn.ππREM   Below is a list of features that will be in the finished version orπREM   later upgrades:ππREM   -Written in C++:over ten times fasterπREM   -Runs in WindowsπREM   -SVGA or VGA graphicsπREM   -Digital sound effects and midi musicπREM   -Full 6DOF enviroment (jumping,strafing,look up-down  the works!)πREM   -Texture mapped surfacesπREM   -Gourad/ray traced shading and light effectsπREM   -Multiple camerasπREM   -Weapons like homing missle launchers and artillery cannonsπREM   -Helpful powerups like 180 degree vision and jet packsπREM   -Lots of enemiesπREM   -Liquid surfaces (dive underwater)πREM   -Modem playπREM   -Large and a-maze-ing levelsπREM   -More cool stuff like level editors and cheatsππREM   This alpha version is a long ways away from the finished versionπREM   described above, but I'm working on it. Not all of these features mayπREM   get included in the first version, but I'll try to squeeze in all thatπREM   I can. I plan to release it as shareware, and include more levels,πREM   weapons, enemies, and sound effects if it is registered.ππREM   I tried to spend as little time as possible working on this alphaπREM   because of the problems and limitations of qbasic. Thus, you can't doπREM   too much in this program. Use the arrow keys to move around, and q toπREM   quit. I also added b for bird's eye view and n for normal view. I mightπREM   use something like that as a map in later versions. Ready? Press F5πREM   to start. If you have any suggestions write me on the internet atπREM   "pvhsa07@ll.kcts.org".πππREM   P.S.  If you want to see this program run in high resolution, changeπREM   the lines that say  SCREEN 8, , drawnpage, shownpage  to  SCREEN 12 andπREM   maxy and screeny to 479 in the line just below the first SCREENπREM   statement. This will disable multiple pages but allow 640x480 graphics.ππππON ERROR GOTO 1π1 RESUME NEXTππREM initializationππDIM template(3, 6, 4, 3), objectloc(37, 3), objectrot(37, 3), objecttype(37)πDIM playerloc(3), playerrot(3), playervel(3), surfacenumber(3), vertexnumber(3, 6)ππshownpage = 1: drawnpage = 0πCOLOR 7πSCREEN 8, , drawnpage, shownpageπperspective = 600πwalkspeed = 5πmaxx = 639: minx = 1: maxy = 199: miny = 1πscreenx = 639: screeny = 199ππREM reading data routineππREM This should read out of a data file in later versionsππFOR i = 1 TO 3πREAD playerloc(i)πNEXT iπFOR j = 1 TO 3πREAD playerrot(j)πNEXT jπFOR k = 1 TO 3πREAD playervel(k)πNEXT kππREAD templatenumberπFOR i = 1 TO templatenumberπREAD surfacenumber(i)πFOR j = 1 TO surfacenumber(i)πREAD vertexnumber(i, j)πFOR k = 1 TO vertexnumber(i, j)πFOR l = 1 TO 3πREAD template(i, j, k, l)πNEXT lπNEXT kπNEXT jπNEXT iππREAD objectnumberπFOR i = 1 TO objectnumberπREAD objecttype(i)πFOR j = 1 TO 3πREAD objectloc(i, j)πNEXT jπFOR k = 1 TO 3πREAD objectrot(i, k)πNEXT kπNEXT iππREM  keyboard scan routineππREM This is the central routine in this version of the game, but it shouldn'tπREM be in later versions.ππGOSUB 100ππDOππin$ = INKEY$πIF RIGHT$(in$, 1) = CHR$(72) THEN vectorvel = walkspeed: GOSUB 50πIF RIGHT$(in$, 1) = CHR$(80) THEN vectorvel = walkspeed * (-1): GOSUB 50πIF RIGHT$(in$, 1) = CHR$(77) THEN playerrot(1) = playerrot(1) - .26799πIF RIGHT$(in$, 1) = CHR$(75) THEN playerrot(1) = playerrot(1) + .26799πIF playerrot(1) > 6.28 THEN playerrot(1) = playerrot(1) - 6.28πIF playerrot(1) < 0 THEN playerrot(1) = playerrot(1) + 6.28πIF in$ = "q" THEN gameover = 1: ENDπIF in$ = "b" THEN playerloc(2) = 100: playerrot(3) = 1.54πIF in$ = "n" THEN playerloc(2) = 0: playerrot(3) = 3.14πIF RIGHT$(in$, 1) <> CHR$(72) AND RIGHT$(in$, 1) <> CHR$(80) THEN GOSUB 55ππREM   IF in$ <> "" OR playervel(1) <> 0 OR playervel(3) <> 0 THEN CLS 1: GOSUB 100ππIF in$ <> "" THEN CLS 1: GOSUB 100ππin$ = ""ππLOOP WHILE gameover = 0ππENDππREM  vector movement converted to cartesianππ50ππREM x velocityπplayervel(1) = playervel(1) + SIN(playerrot(1)) * vectorvelπREM z velocityπplayervel(3) = playervel(3) - COS(playerrot(1)) * vectorvelππplayervel(1) = INT(playervel(1)): playervel(3) = INT(playervel(3))ππIF playervel(1) > 4 THEN playervel(1) = 4πIF playervel(1) < -4 THEN playervel(1) = -4πIF playervel(3) > 4 THEN playervel(1) = 4πIF playervel(3) < -4 THEN playervel(3) = -4ππplayerloc(1) = playerloc(1) + playervel(1)πplayerloc(3) = playerloc(3) + playervel(3)ππREM customized hit detection -- cheapππIF playerloc(1) < 0 THEN playerloc(1) = 0πIF (playerloc(3) <= 30 OR playerloc(3) >= 40) AND playerloc(1) > 60 THEN playerloc(1) = 60πIF playerloc(1) > 80 THEN playerloc(1) = 80ππIF playerloc(3) < 0 THEN playerloc(3) = 0πIF playerloc(3) > 70 THEN playerloc(3) = 70πIF playerloc(1) >= 60 AND playerloc(3) < 30 THEN playerloc(3) = 30πIF playerloc(1) >= 60 AND playerloc(3) > 40 THEN playerloc(3) = 40ππRETURNππREM  frictionππ55 REM  I disabled gliding because it isn't very effective when the programπREM     runs this slow.ππIF playervel(1) > 0 THEN playervel(1) = playervel(1) - 4πIF playervel(1) < 0 THEN playervel(1) = playervel(1) + 4πIF playervel(3) > 0 THEN playervel(3) = playervel(3) - 4πIF playervel(3) < 0 THEN playervel(3) = playervel(3) + 4ππRETURNππREM  main graphics routine (large)ππ100πππFOR i = 1 TO objectnumberπFOR j = 1 TO surfacenumber(objecttype(i))ππGOSUB 2000ππx = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)πGOSUB 3000πx1 = x: y1 = y: z1 = zππx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)πGOSUB 3000πx2 = x: y2 = y: z2 = zππx = template(objecttype(i), j, 3, 1): y = template(objecttype(i), j, 3, 2): z = template(objecttype(i), j, 3, 3)πGOSUB 3000πx3 = x: y3 = y: z3 = zππGOSUB 7000πIF sp < 0 THEN GOTO 105ππx = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)πGOSUB 3000πGOSUB 4000πsxa = sx: sya = syππx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)πGOSUB 3000πGOSUB 4000πsxb = sx: syb = syππGOSUB 5000πIF drawit = 1 THEN LINE (sxa, sya)-(sxb, syb)ππx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)πGOSUB 3000πGOSUB 4000πsxa = sx: sya = syππx = template(objecttype(i), j, 3, 1): y = template(objecttype(i), j, 3, 2): z = template(objecttype(i), j, 3, 3)πGOSUB 3000πGOSUB 4000πsxb = sx: syb = syππGOSUB 5000πIF drawit = 1 THEN LINE (sxa, sya)-(sxb, syb)ππFOR k = 3 TO vertexnumber(objecttype(i), j)πIF k = vertexnumber(objecttype(i), j) THENππ   x = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)π   GOSUB 3000π   GOSUB 4000π   sxa = sx: sya = syπ  π   x = template(objecttype(i), j, k, 1): y = template(objecttype(i), j, k, 2): z = template(objecttype(i), j, k, 3)π   GOSUB 3000π   GOSUB 4000π   sxb = sx: syb = syπ  π   GOSUB 5000π   IF drawit = 1 THENπ     LINE (sxa, sya)-(sxb, syb)π   END IFππELSEπ  π   x = template(objecttype(i), j, k + 1, 1): y = template(objecttype(i), j, k + 1, 2): z = template(objecttype(i), j, k + 1, 3)π   GOSUB 3000π   GOSUB 4000π   sxa = sx: sya = syπ  π   x = template(objecttype(i), j, k, 1): y = template(objecttype(i), j, k, 2): z = template(objecttype(i), j, k, 3)π   GOSUB 3000π   GOSUB 4000π   sxb = sx: syb = syπ  π   GOSUB 5000π   IF drawit = 1 THENπ     LINE (sxa, sya)-(sxb, syb)π   END IFπEND IFπNEXT kπ105 NEXT jπNEXT iππREM switch pagesππdrawnpage = 1 - drawnpageπshownpage = 1 - shownpageπSCREEN 8, , drawnpage, shownpageππRETURNππ2000ππREM sin and cos factorsππREM playerπsr1 = SIN(playerrot(1)): sr2 = SIN(playerrot(2)): sr3 = SIN(playerrot(3))πcr1 = COS(playerrot(1)): cr2 = COS(playerrot(2)): cr3 = COS(playerrot(3))ππREM object -- adding "o" at the end is cheapππsro1 = SIN(objectrot(i, 1)): sro2 = SIN(objectrot(i, 2)): sro3 = SIN(objectrot(i, 3))πcro1 = COS(objectrot(i, 1)): cro2 = COS(objectrot(i, 2)): cro3 = COS(objectrot(i, 3))ππRETURNππ3000 REM 3-d formulasππREM objectππx = (-1) * x: xa = cro1 * x - sro1 * zπza = sro1 * x + cro1 * z: x = cro2 * xa + sro2 * yπya = cro2 * y - sro2 * xa: z = cro3 * za - sro3 * yaπy = sro3 * za + cro3 * yaππx = x + objectloc(i, 1): y = y + objectloc(i, 2): z = z + objectloc(i, 3)ππREM playerππx = x - playerloc(1): y = y - playerloc(2): z = z - playerloc(3)ππx = (-1) * x: xa = cr1 * x - sr1 * zπza = sr1 * x + cr1 * z: x = cr2 * xa + sr2 * yπya = cr2 * y - sr2 * xa: z = cr3 * za - sr3 * yaπy = sr3 * za + cr3 * yaππsx = perspective * x / z: sy = perspective * y / zππREM cheap-o 3-d line clipping (That's why things look strange sometimes)ππdrawit = 1πIF z <= 10 THEN drawit = 0πππRETURNππ4000ππREM 2-d cartesian to 2-d physicalππsx = sx + 399: sy = sy + 299: rx = screenx / 799: ry = screeny / 599πsx = sx * rx: sy = sy * ryππRETURNπππ5000ππREM 2-d line clippingπππIF sxa > sxb THEN tempswap = sxa: sxa = sxb: sxb = tempswap: tempswap = sya: sya = syb: syb = tempswapπIF sxa < minx AND sxb < minx THEN drawit = 0: RETURNπIF sxa > maxx AND sxb > maxx THEN drawit = 0: RETURNπIF sya < miny AND syb < miny THEN drawit = 0: RETURNπIF sya > maxy AND syb > maxy THEN drawit = 0: RETURNπIF sxa < minx THEN c = (syb - sya) / (sxb - sxa) * (sxb - minx) ELSE GOTO 5010π                    sxa = minx: sya = syb - cπ                    IF sya < miny AND syb < miny THEN drawit = 0: RETURNπ                    IF sya > maxy AND syb > maxy THEN drawit = 0: RETURNππ5010  IF sxb > maxx THEN c = (syb - sya) / (sxb - sxa) * (maxx - sxa) ELSE GOTO 5020π                    sxb = maxx: syb = sya + cπ                    IF sya < miny AND syb < miny THEN drawit = 0: RETURNπ                    IF sya > maxy AND syb > maxy THEN drawit = 0: RETURNππ5020 IF sya > syb THEN tempswap = sxa: sxa = sxb: sxb = tempswap: tempswap = sya: sya = syb: syb = tempswapπIF sya < miny THEN c = (sxb - sxa) / (syb - sya) * (syb - miny): sxa = sxb - c: sya = minyπIF syb > maxy THEN c = (sxb - sxa) / (syb - sya) * (maxy - sya): sxb = sxa + c: syb = maxyππRETURNππ7000ππREM plane-equation method of hidden surface removalππsp1 = x1 * (y2 * z3 - y3 * z2): sp1 = (-1) * sp1: sp2 = x2 * (y3 * z1 - y1 * z3)πsp3 = x3 * (y1 * z2 - y2 * z1): sp = sp1 - sp2 - sp3ππRETURNπππREM player dataππDATA 5,0,0,  2.796129,0,3.14,  0,0,0ππREM templatesππDATA 3ππREM template:cubeππDATA 6, 4, 5,5,5, 5,5,-5, -5,5,-5, -5,5,5,  4, 5,-5,5, 5,5,5, -5,5,5, -5,-5,5πDATA 4, 5,-5,-5, 5,5,-5, 5,5,5, 5,-5,5,  4, -5,-5,-5, -5,5,-5, 5,5,-5, 5,-5,-5πDATA    4, -5,-5,5, -5,5,5, -5,5,-5, -5,-5,-5πDATA    4, -5,-5,5, -5,-5,-5, 5,-5,-5, 5,-5,5ππREM template:pyramidππDATA 5, 3, 5,-5,5, 0,10,0, -5,-5,5,  3, 5,-5,-5, 0,10,0, 5,-5,5πDATA    3, -5,-5,5, 0,10,0, -5,-5,-5,  3, -5,-5,-5, 0,10,0, 5,-5,-5πDATA    4, -5,-5,5, -5,-5,-5, 5,-5,-5, 5,-5,5ππREM template:wallππDATA 2, 4, 5,-5,0, 5,5,0, -5,5,0, -5,-5,0,  4, -5,-5,0, -5,5,0, 5,5,0, 5,-5,0πππREM objectsππDATA 36ππREM wallsππDATA 3, 5,0,0, 0,0,0,  3, 15,0,0, 0,0,0,  3, 25,0,0, 0,0,0πDATA 3, 35,0,0, 0,0,0,  3, 45,0,0, 0,0,0,  3, 55,0,0, 0,0,0,  3, 5,0,70, 0,0,0πDATA 3, 15,0,70, 0,0,0,  3, 25,0,70, 0,0,0,  3, 35,0,70, 0,0,0ππDATA 3, 45,0,70, 0,0,0,  3, 55,0,70, 0,0,0,  3, 0,0,5, 1.57,0,0πDATA 3, 0,0,15, 1.57,0,0,  3, 0,0,25, 1.57,0,0,  3, 0,0,35, 1.57,0,0πDATA 3, 0,0,45, 1.57,0,0,  3, 0,0,55, 1.57,0,0,  3, 0,0,65, 1.57,0,0πDATA 3, 60,0,5, 1.57,0,0ππDATA 3, 60,0,15, 1.57,0,0,  3, 60,0,25, 1.57,0,0,  3, 60,0,45, 1.57,0,0πDATA 3, 60,0,55, 1.57,0,0,  3, 60,0,65, 1.57,0,0,  3, 65,0,30, 0,0,0πDATA 3, 75,0,30, 0,0,0,  3, 65,0,40, 0,0,0,  3, 75,0,40, 0,0,0πDATA 3, 80,0,35, 1.57,0,0ππREM other objectsππDATA 1, 15,0,15, 0,0,0,  1, 45,0,15, 0,0,0πDATA 2, 25,0,35, 0,0,0,    1, 15,0,55, 0,0,0πDATA 1, 45,0,55, 0,0,0,  1, 25,15,35, 0,0,0ππππππππTyler Barnes                   STARFIELD WITH BACKGROUND MUSICFidoNet QUIK_BAS Echo          02-22-96 (20:58)       QB, QBasic, PDS        62   2239     MUSISTAR.BAS'Ok, here's a star field I wrote (The kind that has layered stars movingπ'sideways) and it has background music. I can't say it couldn'y be programmedπ'better, but it should give you an idea on how to do background music. By theπ'way, when you run it, it'll ask for a bunch of settings. I suggest 75 star, 3π'layers, layer speeds at 1, 1.5, and 2, Music on. You may have to adjust theseπ'setting according to taste, and the speed of your computer.π'Oh, also, make all the stars move left. It looks stupid if they move inπ'different directions.ππ'By D. Tyler Barnes '95π'Tested on a 486dx2 80mhzπON PLAY(1) GOSUB MuchMusicπCLSπINPUT "Number of stars:", StarNum%πINPUT "Number of layers:", LNum%πDIM StarX(StarNum%), StarY(StarNum%), Layer(LNum%)πFOR L = 1 TO LNum%πPRINT "Layer"; L; " speed:";πINPUT Layer(L)πPRINT "Layer"; L; " direction [L/R]";πDO: K$ = UCASE$(INKEY$): LOOP UNTIL K$ = "L" OR K$ = "R"πIF K$ = "L" THEN Layer(L) = -Layer(L)πPRINTπNEXT LπPLAY ONπPRINT "Music? [Y/N]";πWHILE A$ <> "Y" AND A$ <> "N": A$ = UCASE$(INKEY$): WENDπIF A$ = "Y" THEN MBuff$ =π"T150L2O3CGP16L16FEDL2>C<GP16L16FEDL2>C<GP16L16FEFL2D"πPLAY "MB X" + VARPTR$(MBuff$)πSCREEN 13πFOR I% = 1 TO StarNum%πStarX(I%) = (RND * 319) + 1πStarY(I%) = (RND * 199) + 1πNEXT I%πDOπCL = 1πFOR I% = 1 TO StarNum%πPSET (StarX(I%), StarY(I%)), 0πIF I% > (StarNum% / LNum%) * CL THEN CL = CL + 1πStarX(I%) = StarX(I%) + Layer(CL)πIF StarX(I%) < 1 THEN StarX(I%) = 319: StarY(I%) = RND * 199πIF StarX(I%) > 319 THEN StarX(I%) = 1: StarY(I%) = RND * 199πC% = (CL * 4) + 19πPSET (StarX(I%), StarY(I%)), C%πNEXT I%πLOOP UNTIL LEN(INKEY$)πENDπMuchMusic:πCount% = Count% + 1πSELECT CASE Count%πCASE 0: MBuff$ = "T150L2O3CGP16L16FEDL2>C<GP16L16FEDL2>C<GP16L16FEFL2D"πCASE 1: MBuff$ = "P16L16<GGGL2>CGP32L16FEDL2>C<GP16L16FEDL2>C<GP16L16A+"πCASE 2: MBuff$ = "AA+L1GL2G.L8<G.L16GL4A.L8A>FEDCL16CDEDP16L8"πCASE 3: MBuff$ = "<AL4BL8G.L16G"πCASE 4: MBuff$ = "L4A.L8A>FEDCGP8L4D.P8L8<G.L16GL4A.L8A>FEDCL16"πCASE 5: MBuff$ = "CDEDP16L8<A"πCASE 6: MBuff$ = "L4BP16L8>G.L16GL8>C.L16<A+L8G+.L16GL8F.L16D+L8D.L16CL1G"πCASE 7: MBuff$ = "L2G.P16L16GGGL8>CP8L16<CCCL2C.": Count% = -1πEND SELECTπPLAY "MB X" + VARPTR$(MBuff$)πRETURNπEric Carr                      SCALE SPRITE                   FidoNet QUIK_BAS Echo          03-18-96 (13:23)       QB, QBasic, PDS        45   1712     SCALSPRT.BAS'Ok..Here is a routine (I just made it so...) that scales a sprite on theπ'screen. It can scale to ANY size, and it only uses Integers, not floatingπ'point math, so it runs really smooth on my 486sx when it's compiled..Feel freeπ'to use or modify this for your own programs, but just give me a little creditπ'for it if it's used in a game or somthing..π'The sprite in here is a 64x64 block of colors..You would have to load in yourπ'own sprite from the Harddrive and make sure SP is DIMed the correct amount.π'The sprite data is stored in horizontal runs (X) from up to down..π'For example, a 4x4 sprite would be 16 #'s long -π'sprite>  0/\0π'         //\\     _π'         //\\     _   0/\0//\\//\\0||0       Except it would be in numbers,π'         0||0                                not characters.ππ'One last thing, this only scales sprite bigger than the original.  I haven'tπ'perfected scaling a sprite smaller yet.. Thats why it starts scaling at theπ'orignal size, not smaller.ππ DEFINT A-Z: SCREEN 13: DEF SEG = &HA000: DIM SP(4096)ππ'Load your sprite into SP. The size is 64x64 but you can change it.ππ FOR T = 1 TO 4096π C = C + 1: IF C > 64 THEN C = 1π SP(T) = Cπ NEXT Tπ 'End of sample sprite makingππ SX = 64: SY = 64 ' Size of original spriteππ FOR SF = 64 TO 192 '(192 IS 64*3 - scaling to 3x)π LX = SF: LY = SF   ' LX and LY are the new Sprite sizesπ GOSUB SCAL.SPRTπ NEXT: SLEEP: ENDππSCAL.SPRT:π CT = 1: ERY = 0π FOR Y = 1 TO LY: ER = 0π FOR x = 1 TO LX: POKE 320 * Y + x, SP(CT)π ER = ER + SX: IF ER > LX THEN ER = ER - LX: CT = CT + 1π NEXT xπ ERY = ERY + SYπ IF ERY > LY THEN ERY = ERY - LY: CT = CT + 1 ELSE CT = CT - (SX - 1)π NEXT Y: RETURNππPeder Brynolf                  3D MATRIX ROTATIONS            pbrynolf@dataphone.se          03-22-96 (07:45)       QB, QBasic, PDS        164  3152     3DROT.BAS   'This one shows how to do some 3d matris rotations.ππCLSππPRINT "Typ 125 okompilerad för 1vbl"πPRINT "Typ 220 kompilerad för 1vbl"πPRINT : PRINT "På en 66a asså!"πPRINTππINPUT "Antal punkter:"; NOP%ππSCREEN 13πRANDOMIZE TIMERπππREM NOP% = 150ππON KEY(10) GOSUB QUITπKEY(10) ONππDIM OX%(NOP%), OY%(NOP%), PFX(NOP%), PTX(NOP%), PFY(NOP%), PTY(NOP%), PFZ(NOP%), PTZ(NOP%), XP(NOP%), YP(NOP%), ZP(NOP%), SX%(NOP%), SY%(NOP%), SZ%(NOP%), KX(3), KY(3), KZ(3), CX%(3), CY%(3), CZ%(3)ππRADC = 1.745328E-02ππFOR I% = 0 TO 63π   PALETTE I%, I% + I% * 256 + I% * 65536πNEXT I%ππFOR I% = 0 TO 3π   READ KX(I%), KY(I%), KZ(I%)πNEXT I%ππFOR I% = 0 TO NOP%π  π   S% = RND * 6π   IF S% = 0 THEN XP(I%) = RND: YP(I%) = RND: ZP(I%) = 0π   IF S% = 1 THEN XP(I%) = RND: YP(I%) = RND: ZP(I%) = 1π   IF S% = 2 THEN XP(I%) = RND: YP(I%) = 0: ZP(I%) = RNDπ   IF S% = 3 THEN XP(I%) = RND: YP(I%) = 1: ZP(I%) = RNDπ   IF S% = 4 THEN XP(I%) = 0: YP(I%) = RND: ZP(I%) = RNDπ   IF S% = 5 THEN XP(I%) = 1: YP(I%) = RND: ZP(I%) = RNDπ πNEXT I%πππDOππFOR I% = 0 TO 3π   CX%(I%) = KX(I%) + XPπ   CY%(I%) = KY(I%) + YPπ   CZ%(I%) = KZ(I%) + ZPπNEXT I%πREM *** ROTATE X/Y ***ππSV = SIN(RADC * ANXY)πCV = COS(RADC * ANXY)ππFOR I% = 0 TO 3π   TX% = SV * CX%(I%) + CV * CY%(I%)π   TY% = -SV * CY%(I%) + CV * CX%(I%)π   CX%(I%) = TX%π   CY%(I%) = TY%πNEXT I%ππREM *** ROTATE X/Z ***ππSV = SIN(RADC * ANXZ)πCV = COS(RADC * ANXZ)ππFOR I% = 0 TO 3π   TX% = SV * CX%(I%) + CV * CZ%(I%)π   TZ% = -SV * CZ%(I%) + CV * CX%(I%)π   CX%(I%) = TX%π   CZ%(I%) = TZ%πNEXT I%πππREM *** ROTATE Y/Z ***ππSV = SIN(RADC * ANYZ)πCV = COS(RADC * ANYZ)ππFOR I% = 0 TO 3π   TY% = SV * CY%(I%) + CV * CZ%(I%)π   TZ% = -SV * CZ%(I%) + CV * CY%(I%)π   CY%(I%) = TY%π   CZ%(I%) = TZ%πNEXT I%ππFOR I% = 1 TO 3π   CX%(I%) = CX%(I%) - CX%(0)π   CY%(I%) = CY%(I%) - CY%(0)π   CZ%(I%) = CZ%(I%) - CZ%(0)πNEXT I%ππCX0% = CX%(0)πCY0% = CY%(0)πCZ0% = CZ%(0)πCX1% = CX%(1)πCY1% = CY%(1)πCZ1% = CZ%(1)πCX2% = CX%(2)πCY2% = CY%(2)πCZ2% = CZ%(2)πCX3% = CX%(3)πCY3% = CY%(3)πCZ3% = CZ%(3)πππFOR I% = 0 TO NOP%π  π   XP = XP(I%)π   YP = YP(I%)π   ZP = ZP(I%)π  π   SX%(I%) = CX0% + CX1% * XP + CX2% * YP + CX3% * ZPπ   SY%(I%) = CY0% + CY1% * XP + CY2% * YP + CY3% * ZPπ   SZ%(I%) = CZ0% + CZ1% * XP + CZ2% * YP + CZ3% * ZPππ   IF SY%(I%) > 80 THEN SY%(I%) = 80ππNEXT I%ππFOR I% = 0 TO NOP%π   SK = 300 / (300 + SZ%(I%))π   SX%(I%) = SX%(I%) * SKπ   SY%(I%) = SY%(I%) * SKπNEXT I%ππFOR I% = 0 TO NOP%π  π   X% = SX%(I%) + 160π   Y% = SY%(I%) + 100π   PSET (OX%(I%), OY%(I%)), 0π   OX%(I%) = X%π   OY%(I%) = Y%π   PSET (X%, Y%), 32 - SZ%(I%) / 8ππNEXT I%ππREM WK:     IF INKEY$ = "" THEN GOTO WKππANXY = ANXY - .25πANXZ = ANXZ - .5πANYZ = ANYZ - 1ππXP = SIN(RADC * BANAN * 1.7315) * 40πYP = SIN(RADC * BANAN * 2.3125) * 40πZP = SIN(RADC * BANAN * 3.2357) * 200πBANAN = BANAN + .5ππREM *** Wait vbl ***ππWVBL: A% = INP(&H3DA)π      A% = A% MOD 16π      A% = A% / 16π      IF A% <> 1 THEN GOTO WVBLπLOOPππDATA    50,50,50, -50,50,50 ,50,-50,50, 50,50,-50ππQUIT:πSYSTEMππPeder Brynolf                  2D ROTATING TEXTURE MAPS       pbrynolf@dataphone.se          03-22-96 (07:45)       QB, QBasic, PDS        151  2439     2DMAPS.BAS  'Here's a little program showing how to 2d-rotate texture maps.ππDECLARE SUB TEXTLINE (X1, X2, Y, TX1, TY1, TX2, TY2)πRANDOMIZE TIMERπZANM = 3.14159 / 180ππSCREEN 13πNOP = 4ππPRINT "01234567"πPRINT "HEJSAN!"πPRINT " FUNKAR"πPRINT "DETTA SÅ"πPRINT "BLIR JAG"πPRINT "  GLAD!"πPRINT " ALTER"πPRINT "  EGO"πDIM X(NOP), Y(NOP)πDIM TX(NOP), TY(NOP)ππDOπRESTORE POLYCOORDSπFOR I = 0 TO NOP - 1π   READ X(I), Y(I)π   X(I) = SIN(ZANM * ((I * 90) + an)) * 50 + 160π   Y(I) = COS(ZANM * ((I * 90) + an)) * 50 + 100πNEXT Iπan = an + 1ππOX = X(3)πOY = Y(3)πFOR I = 0 TO 3π   X = X(I)π   Y = Y(I)π   LINE (X, Y)-(OX, OY)π   OX = Xπ   OY = YπNEXT IππRESTORE TEXTCOORDSπFOR I = 0 TO NOP - 1π   READ TX(I), TY(I)πNEXT IππDIM XP(199), TXP(199), TYP(199)ππFOR Y = 0 TO 199π   XP(Y) = -1πNEXT YππOX = X(NOP - 1)πOY = Y(NOP - 1)πOTX = TX(NOP - 1)πOTY = TY(NOP - 1)ππFOR I = 0 TO NOP - 1π   X = X(I)π   Y = Y(I)π   TX = TX(I)π   TY = TY(I)π  π   XF = Xπ   YF = Yπ   XT = OXπ   YT = OYπ  π   TXF = TXπ   TYF = TYπ   TXT = OTXπ   TYT = OTYππ   IF YF = YT THEN GOTO SKIPIT2ππ   IF YF > YT THEN SWAP YF, YT: SWAP XF, XT: SWAP TYF, TYT: SWAP TXF, TXTππ   XSK = (XT - XF) / (YT - YF)π   XC = XFπ  π   TXSK = (TXT - TXF) / (YT - YF)π   TXC = TXFπ   TYSK = (TYT - TYF) / (YT - YF)π   TYC = TYFπ  π   FOR YC = YF TO YT - 1π     π      IF XP(YC) = -1 THENπ         XP(YC) = XCπ         TXP(YC) = TXCπ         TYP(YC) = TYCπ      ELSEπ         OXC = XCπ         OTXC = TXCπ         OTYC = TYCπ         πREM         LINE (XP(YC), YC)-(XC, YC), 4π         TEXTLINE XP(YC), XC, YC, TXP(YC), TYP(YC), TXC, TYCπ         XP(YC) = -1π         XC = OXCπ         TXC = OTXCπ         TYC = OTYCπ     π      END IFππ      XC = XC + XSKπ     π      TXC = TXC + TXSKπ      TYC = TYC + TYSKππ   NEXT YCπ πSKIPIT2:ππ   OTX = TXπ   OTY = TYπ   OX = Xπ   OY = YπNEXT IπLOOP UNTIL INKEY$ = " "πSYSTEMπPOLYCOORDS:πDATA 113,154πDATA 288,181πDATA 245,124πDATA 96,19ππTEXTCOORDS:πDATA 0,0πDATA 64,0πDATA 64,64πDATA 0,64ππSUB TEXTLINE (X1, X2, Y, TX1, TY1, TX2, TY2)ππIF X1 = X2 GOTO SKIPITππIF X1 > X2 THEN SWAP X1, X2: SWAP TX1, TX2: SWAP TY1, TY2ππXSK = (TX2 - TX1) / (X2 - X1)πXC = TX1πYSK = (TY2 - TY1) / (X2 - X1)πYC = TY1ππFOR X = X1 TO X2π   C = POINT(XC, YC)π   PSET (X, Y), Cπ   XC = XC + XSKπ   YC = YC + YSKπNEXT XππSKIPIT:πEND SUBπAaron Scott Zabudsky           COLOR BARS THAT COLOR CYCLE    zabudsk@ecf.toronto.edu        09-05-94 (21:40)       QB, QBasic, PDS        25   418      COLRBARS.BASDIM c(255, 3)πSCREEN 13πc = 1πFOR y = 0 TO 20πFOR z = 1 TO 256πPSET (z, y), cπc = (c + 1) MOD 256πIF c = 0 THEN c = 1πNEXT zπNEXT yπFOR z = 1 TO 255πOUT &H3C7, zπc(z, 1) = INP(&H3C9)πc(z, 2) = INP(&H3C9)πc(z, 3) = INP(&H3C9)πNEXT zπFOR o = 1 TO 255πFOR z = 1 TO 255πOUT &H3C8, zπOUT &H3C9, c((z + o) MOD 256, 1)πOUT &H3C9, c((z + o) MOD 256, 2)πOUT &H3C9, c((z + o) MOD 256, 3)πNEXT zπNEXT oππAaron Scott Zabudsky           COMPUTERIZED SPIROGRAPH        zabudsk@ecf.toronto.edu        05-19-93 (12:36)       QB, QBasic, PDS        14   350      SPIRO.BAS   SCREEN 12πCLSπox = 300: oy = 300: r = 30πFOR n = 2 TO 50 STEP .5ππpi = 3.141592653589793#πFOR x = 0 * 100 TO 2 * 100 STEP nπREM LINE (ox, oy)-(ox + 100 * COS(x), oy + 100 * SIN(x))πLINE (ox + 100 * COS(x * pi / 100), oy + 100 * SIN(x * pi / 100))-(ox + 100 * COS(x * pi / 100 + n), oy + 100 * SIN(x * pi / 100 + n))ππNEXT xπCLSπNEXT nππEarl L. Montgomery             REVERSING SCREEN IMAGE         FidoNet QUIK_BAS Echo          02-18-96 (12:41)       QB, QBasic, PDS        29   742      REVERSE.BAS  'Noticed you were asking about turning the screen upside down. Hereπ 'is a routine that does a mirror image. I had written a program thatπ 'will reverse the screen horizontally and vertically. Will have toπ 'look for the source code.ππDEFINT A-ZπSCREEN 9πDIM bottom(1500)πCOLOR 14πLOCATE 12, 30: PRINT "Earl L. Montgomery"πCIRCLE (100, 100), 10πLINE (100, 108)-(100, 114)πLINE (84, 114)-(115, 114)πLINE (84, 114)-(84, 134)πLINE (115, 114)-(115, 134)πLINE (100, 114)-(100, 144)πLINE (100, 144)-(90, 174)πLINE (100, 144)-(110, 174)πCOLOR 4πLINE (0, 0)-(639, 50), , BFπv1 = -0: v2 = 350πFOR x = 0 TO 349πv1 = v1 + 1πv2 = v2 - 1πGET (0, v1)-(639, v1), bottomπPUT (0, v2), bottom, PSETπSOUND 32000, .5πNEXTπSLEEP 100πEarl L. Montgomery             BACK SWITCHING                 FidoNet QUIK_BAS Echo          03-21-96 (21:23)       QB, PDS                58   1394     BANKSWIT.BAS 'This program demonstrates how to use bank switching so that youπ 'can poke the entire 720X540X256 screen rather than use the slowπ 'ROM Bios interrupt SETPIXEL. This code will work with Videoπ '7 graphic chips. If you do not have a video7 graphic chip butπ 'would like to run this demo. Please give me the name of yourπ 'graphic card/chip and I should be able to furnish you with theπ 'correct code so it will run on your system.ππ '$INCLUDE: 'qb.bi'π DIM inreg AS RegTypeπ DIM outreg AS RegTypeπ DEFLNG A-Zπ inreg.ax = &H6F05π 'inreg.bx = &H66: flag = 66:   '640x400x256π 'inreg.bx = &H67: flag = 67:   '640x480x256π inreg.bx = &H68: flag = 68:    '720x540x256π 'inreg.bx = &H69:flag = 69:    '800x600x256π CALL interrupt(&H10, inreg, outreg)π DEF SEG = &HA000π FOR x = 0 TO 65535π POKE x, 4π NEXTπbank1:π OUT &H3C4, &HE8π OUT &H3C5, &H10π FOR x = 0 TO 65535π POKE x, 184π NEXTπbank2:π OUT &H3C4, &HE8π OUT &H3C5, &H20π FOR x = 0 TO 65535π POKE x, 4π NEXTπbank3:π OUT &H3C4, &HE8π OUT &H3C5, &H30π FOR x = 0 TO 65535π POKE x, 3π NEXTπbank4:π OUT &H3C4, &HE8π OUT &H3C5, &H40π FOR x = 0 TO 65535π POKE x, 143π NEXTπ IF flag = 66 OR flag = 67 THEN GOTO bank5notneededπbank5:π OUT &H3C4, &HE8π OUT &H3C5, &H50π FOR x = 0 TO 65535π POKE x, 3π NEXTπbank5notneeded:πSLEEP (100)πinreg.ax = &H3πCALL interrupt(&H10, inreg, outreg)πCLS : ENDπJeff Lawson                    TGA VIEWER (320X200)           x2ftp.oulu.fi                  02-10-94 (11:50)       QB, QBasic, PDS        30   639      TGAVIEW.BAS DEFINT A-ZππCONST FontHeight = 23πCONST ScreenWidth = 320 / 4ππSCREEN 13ππ'display the bitmapπOPEN "BIGHEART.TGA" FOR BINARY AS #1πSEEK #1, 19πFOR Attr = 0 TO 255π    Value$ = SPACE$(3)π    GET #1, , Value$π    Red& = ASC(MID$(Value$, 3))π    Green& = ASC(MID$(Value$, 2))π    Blue& = ASC(MID$(Value$, 1))π    OUT &H3C8, Attrπ    OUT &H3C9, Red&π    OUT &H3C9, Green&π    OUT &H3C9, Blue&π    'PALETTE Attr, 65535 * Blue& + 256 * Green& + Red&πNEXT AttrπSEEK #1, 19 + 768: A$ = " "πFOR Row = 0 TO 199π    FOR Col = 0 TO 319π        GET #1, , A$π        PSET (Col, Row), ASC(A$)π    NEXT ColπNEXT RowπCLOSE #1πDave Shea                      ANIMATION OF RUNNING MAN       FidoNet QUIK_BAS Echo          03-24-96 (00:00)       QB, QBasic, PDS        37   2364     RUNMAN.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"MAN.ZIP",4^6:Z&=1493:?STRING$(50,177);πU"%up()%9%%%#-%/YnLE:;0M\j'.%%v8%%%,%%%%rf%sSgf4xfev):re5c#X*8'<uπU"mVV&*O,9PIKC2g3B6V[YRa]mVbsFy'4<ODK>NE,zK5g#pA##bA7W2hhn$1$N6[-πU"G>Gs7JiPxETiJ:(-0bPSSm:2</dVpW1++h*hQ<'*9;z19Y3[Y2Fcj4^hw6g>eJ%πU"eSb7TiCK(YVtZNg^UKIrDV0*lG1*7H(JV6QFA%[Z;P5QM8=Dg$kmaUeJsNxou:^πU"vo>tH.HAE&LkMTfXoobL?c-$h3Tklnb8Y[qs=LX\VvKmC]77i$V_Y,?1''NXO]+πU"<iVP3[B\AMOD3tsF2SX8NHo8b&uKr2JiZ85lKEovjKfj->>I5n;Bb_+mBYb9/s(πU"RCHN-l+A/AV]#dkArq)CT+f&j%94HUpg#W(oWh<PAfA9<xL%15TE-H[y_#$<CV#πU"=IEfgGTK&cOPsEcDr>o9o$;v._\lmDn(h4jp>%S>%r&cP.gQy0J$Cg[Z+B3/p?aπU"3.Bv\u5V'w+0%h6y6\Pp$kyZ;fk_<7S&%CJg#ovD]8vL[<oGhni:TfljTrYpy9.πU"gqu4<;<pjJRq:pnwTk^&Nt1(Gb]:B1ZqRC#29FK_6Q*i\gH3Y7?BPqoii5gnXwHπU":aRFWms)eZ4;agMjDaype?2Gt>V3Y'YJn-Lt4\N<G4mvSV?M(/m1Y4E1zDL/-c9πU"[PIguDyp:(FaXgDJJ87/%<+/HWzFAPxRZno7JGL#z4K57go#Qo#'S'>5Q4#MEH-πU"mG[v(Q0W3\+=DoVXtsDf>zP'&meIiF6&j,Wm.IWE/8iJ)\]LnnZk%PiaGE/>7]xπU"L=?v*g]5rFWtFJjXK*jro?PaqcWIqJwWPwhrowacxZNs0rTwRtnM:c3(;=*8&%uπU"p()%9%%%I-%^SmxER905]?'[%%,s%%%,%%%%rf%sSfsXrfT,,ASU9d+u<=99SkOπU"RRN%w>:b+_NLhins+B\d%Eq(Y9$a_#Y(k#DrisLX]blobe&'-SF[mBrO#sZRn>=πU"nLuXvsTQh<LmLdIKNitLXo>Hwa>fsP>N6jSRdJLYE*QF_2mfX7N37tDf<Y%bhypπU"MkSdjl,.6DuH&93pHTMtK-((Z/X#iGk#8;gTn?60HNibl;Vr-FRDvmq^iPXM:*>πU"i5,N.cUCp3+'.tckAx)v+UwXg8dFo2+uFVJZeQfc[b9DIccPo\8uH*8c*jgqwZIπU"sj$eYCk>Zr4sEhvzAhp*v0U<()l[F/?J]1;%L7XjNWEi:ta[$JkkvgS:E4NqCF^πU"W?3p4dv>ruFtt#]'vBs6OY**WZ[w[7?5TVXgit\s+BP1^t^X8fp0%,HgF[rarp.πU"GZ-h8wsHtFkx9CSJ5dl0zG+tvgypDrXo1aLN\hnHNRbk;Tb>>u?.ni=Cb84HHc_πU"XVMa9(Ao/qq8.v:K:_ofSQ[_;ulEP?tT/B-.vZBSLi<Htj1SR/acZ3cN_$obFrcπU"(f$T[?A?xL<MNjpMgbwrjc#<UE=i$+S,(tK<si<*S%MO0vh8rMZtib:vfvyNsYJπU"7w=isFyx%Z'%%j%YDuXqahPKvN?,PLs*&en+&/nvclpoQ&MYH3s7:/UtN+Hi:8wπU"l:TzL-Ys/8FP#tTt:CLZ[boq%s=9=3hv&RvlffD1l+=u:UinjNb58Lmup)smnvdπU"vb:tNattN(^v),L%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%dπU"%%nq%(up&%'9%9%%%%-I%/YLsE:;M(\j'%(%v8%%%,%%%%%%%%%&%E%%%%%%%%%πU"r%fsSg%fxup%&'9%%9%%%I-%^SmxER905]?'[%%,s%%%,%%%%%%%%%%%%E%%%'9πU"'%%%rfsS%fsru%p*+%%%%%'#%'%9%%%%z%*%%%%%πEND SUBπCLOSE:IF S=134AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπUnknown Author(s)              COLORFUL WORMHOLE              sansbach@gpu.srv.ualberta.ca   12-14-95 (00:00)       QB, PDS                136  8958     TUNNEL.BAS  '>>> Page 1 of TUNNEL.ZIP begins here. TYPE:BINAA TLEN:6362πDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.1πSUB V1:OPEN "O",1,"TUNNEL.ZIP",4^6:Z&=6362:?STRING$(50,177);πU"%up()%9%%%R-%DR\5E1Q>XQS'%%%y/%%%/%%%%yz%ssjq%SgfxNf%<>\jU5w5]=πU"N]*n4X2HR).8LG<d[%rwY'(:uByZtvx2&F[5mrLCtWU4W\HVmJ:F-?aq:?+G9a,πU"viyyX2)-Jn$*-0.F]z#^RD#qPmGEHiRO+7*s-Rpn,BkPU1iu_uN7pn1kFtaf]/DπU"rF&-+8qowC6_J=0R0)-i/fOVUS[zZmqR.b[J%%NcoaWkBSI4E_JKEoZZ&W-#hj+πU"qks;-h.2Nb<?xB.0SaII-pj4bpicWtYqX8<K/?5<$rO9lW?.;V1BNaTH6-jit:%πU"k^j>pAzI;*Y$ifE4:#I>a.1(7bX'(qg3+;'%t;&(0J$y<?k#=q;qm;*#)#02KS^πU";.-U'-H9#$Qid&QO(3fIDlEO'[#h;3(C-'$R%9Am%vmOGMwX>jVODB$q#'4gW)1πU"r(+.J;80a^Q?'4:wR9z]:77e6%9Ev4D48y;l0H^MU>D-/rt-[]%SZ\s&3?/>MXdπU"Sb?_a0#Is^]8lFB71M8(9Pk3Z3k\NEhaW_1,gf+l:B2=W89RmYFX4\W]mgV*\AhπU"RkLRA37wU3rW]k6/gQPKMr1/[hEa-?*[2()<[sa(:*.PvGsUq)T)#mPz<QgAVe4πU":S&H2hKH[N.Ki=&;[t#J42_aRangUa2(GNC2ExVF?*pM:\+1*(t&LcOFPt7/GieπU".eqLd&Tp1G,NO^)B/.\(\('F1y3Iy8?wVW1T%r,e357%?W%M3xVL]V44djAXlk]πU"v-V\nGXkprozI,cC*Y?jfxx-9M4adbe6u=&Kod5%U8ibNv5g,J6nH8WxL]Jq8N7πU"nb,(K'>f/h,u'x)4b<</XS:4HTJ*+,LuGF$U\KY\hpAf<Qg=uxAnodAV3q;k+uUπU"HN]Vs+1BQ4flUixXP-3#EFI7H<$]sX,5xYllVK4iQ.QSZO5l[KCsdhqymYNp2-3πU"r1y8+]g+p2c3kbX't0up%()9%%%%-%3NW]DN;fB%%W6%%&+?%%%-%%%%uqty%SvπU"qgNfgJCdyjm#>zh,r&1#X=$J4_AZZ=J7HmKQA^[UGH#sUIlFY]fU'-F.5<ARbl5πU"QE[)W\QF\%fCWsQ(%Sw-dkuU)mheA<LpJE9*uI*O'EyO0\r)n%1oh;kBp&Nk\ghπU"jEemb66xUUtYNdjzS.zvyb=VoHY.-?_DW-jB/$3nVCCpL.l^I6AA[5Wo_.oVw)0πU"/[UF<A&;7eNi]0)A'*K%+)OV6O$Og<Ol9P:9Moa#i(#/OV/AKY12K[95,Ua2U4uπU"^(_3E1(YOj097/*9Y)O%#t&#P^RO4Qa*e+W#)3&68P09UdU+[L8M]a,8g+E%EKPπU"G/F6))'.&]PZ99x9k8/0Y(SE&4P^\Ph9G0Y=?#7]0+1%UPVS/AYG0a4W(0g+u&BπU"p(XP(lPqE^4'%u^7w+c7%\i#3Y8o29Q+5-951e*9W'W+&]%D%Sn%$Pjp9&9-092πU"e=5?q=&/7U*9YFOK.E;W($[PN91ICh<0I5>)D1O\$\QCf0,qreV'i]u0\k[MaFxπU"Yp/%)-&_^EB/3F218?DQl,'[0yfwI+Uh&'IoEoauI(9^[o0a(&]'<%&syu(8?=]πU"%*Im/.o+e&A>&,PM1rQEL(]*o[1]3uux$xg9,uvooF\'4NW^i6GzRVxuQIu)S)AπU".=RA7puGK]W;0R]C%2xRLfn]D]HhCrlf/MZ*o(O]ntSKkG7.B[Gg)Z^>H>M9<t;πU"izrvFnrV8Z%>I.r.WsBp;/3qPgm.V[\:qbTiKxFroNlbO[]$J#+yxb;A$LtI1EQπU"V#-CK'K8THbmY,:PG+]pV;\j%LEH0Ro$gMEBJ&%t_5G9&+&X&mb*a*7S=oo&1[LπU"C?ghV60YIYB6Kr;?+Z\>[L:$i.GQjm)XY1]QNk9)gi1\QR)H=Iqh.8mjiH+)HK=πU"d8afY(YQX.BGG]j8/P:^+)$7a>^Yr).<5;H<1_YGAQ<7+^q?.:/t)f6W5WYADQfπU"5+^j?Z:%Z)TJnG^:.F)(EG4J:D)R\55Y$Y.6eaIQj)_j/4:%r)\8ou):dF.We?=πU"#:H7r5XY$a-Wqi:;Q07r5\Y$a.WsiKh-MXEYl)Fj55ZYUsQxdcYV)hOHqDQ0XEGπU"dB:,-M,bYd7TUring-MVY;-Qv)Kp6Kg9Y%:lg.MnY&2)hq8^8uFB:D6K,QYt-0wπU"\Qtg6KiY%X)47VKeYB^)nLq9H)x$$:n7u4>:f-Nwa/\9YE:HC)^6KbdY5:*P/b]πU"&O,i%>Q'D%1i-^+)1O$%^-w3Z]MD(k1%Wz3-JIFAF_=h>=g>T\Pz#QFL9zN%4,MπU"S9ol-$2/y3y*YQSExi_=s>OGN#2c<Y0Trr>Ef-$oJyL);ydVZeVu3OO_wf9ZN\#πU"9wC8(3e+_BPP,ut8tmFheBxc,HnmwVnBORP#Axs^mNeGSsrKIV4bm[>1j<+NK6\πU"?0>JT[osnsUnja;bdw-g;ZdBdd$aBC*Umn.-4&DprlAkMi#2m2F*<eP[HTol8p*πU"It2ifeBcW#4tqZvgqc4cP<Np&6mO\LCF^/?x?pauT<umGFsU2eYO^jcZ(,s..VRπU"J0i-z$I#-RW5%B:UZE5\qAA5OJwIzcer_qso^.6U#PL)o\vSV.h:%9PuEM'a]MSπU"c.mpsfsM(9&=)9fYhp4%pAoH*(('dTVI$dF1%$dB=MW:3v-*VK=^:'Ik$mM?&ZHπU"P<06)T'FK<DMbST'vq)%=:qg[nTg:7xJ6A^/MyKpPoY*)a-.*;^cm?Ovila]WM9πU"e4Sb\fB:\pImrM10&s\;*S.Rb\4h:lJ$6buI]P(3wJx,)=EhPKjtJ9/&^,[[m+eπU"fxb>bJ)B,QMXJ&qxH_Ubq8WBa(6L(]qXH7_$%52Q]'c3cajDU_Woju-H7pGiT9jπU"n)F:Kk:8ma,[\pxesBYt,eGB/2c9D+L:E]9:BjdsD>,$Yaab^gU1jhEJG^eED=sπU"K9C&f_pQ4\wlE0/yf<[HfhAsLh4MKjq\;Y-lk+jt8PVh_Sdhooj[-rO^FF32RiMπU"(Q4M;oDG9cWY[,]'/Ke;y2;0mn=XU'h\nH[A#6(<VYo#)QqKF;ZNjV:3x_BfCzhπU"lEQ0t.k+%-jAi[O;,/SEwrPA&PsLUL.[QilJ]*vN+K:vwoHweV,]pc^SI7(JAL7πU"NBg3cVizFyxhZ=ls%[qt39k$wIx48AvOrPbqeJf84C9H9GI(0(J(Tr<NQt^[JsGπU"1gj>-b1S6[LY01#Y82shGM*DUtydh:.av/dYv.U7Zf\5u4=W:[HjiI)a^.iasYkπU"WqgM-Zr=C;V40jgwDE?QuoT=Qp=Xw9Zm*&J_K$jJ_[/P]//>/_p]X'>h;OwoDU3πU"1L*zi2BSTfP^XX]P>4=%&x%X\.6eAkkU=O,HX,UE5S&'&C.;ONsk*9G,DF^*QnRπU"Rjv31m+KB\+g\g78^lWcbn%/.TX2^/E9b8'Z>/-q8e*VAX;aG=O9-BOge7p8K#lπU"rvxB(NC2ud1IEt*u8XY9jDCgJoROK()GN2PfV3%]/4?gupIWE'mdGd/:QQ><7$2πU"<0qOHavc>f/Z#XR+]RHI'7L$WgS+H/r[UFgTT'N,1k*G].LbFf>xVpZ&3I_AZD2πU"=cp7be[-/wCO5Y9MD*QfSwW8o6FgjtE>095YpfYF%(NI(lUP9T%<fF28<+:cEv(πU"r72?:8/AUmX[(4170Z9g;.H.,qE8qekRIw17mw_IuCn/QL+>c$C]/c$6<UbSSXcπU"OHij*vK9DE#:;NY%]XbhJ/-g)(#duG,_dU^Gb<mz9BVt$\uEk:v4oh-JfbhZx6=πU"IdbsS<giO-[vq4iN;k>XfK9,3JFy'0BiRt&o-nc.5#ToW\HlA\_583YZV<kBp:CπU"Pp6YIjQb7d_Dp^WGFQe&0CR>z+4lD,ht?D$OF]\N[#BU-_g/9V#[jXqK]['IBRVπU"u+Y1LG]YfGqIVJ0*Ic7t9e_('/4S>9;)*W9:i;<i7bbkNKd]8p.:B:dGw_1C;$4πU"CLNCN5+))QJsm'YE:hwd-e?FEckX+rdkliHUSQM,jH)2+zLNSQsUZ==FbL28RB$πU"^l,UM?eA:ujtYDik73\v#)1+BmU_M^4#NF7U*48=KTLU=r,ElJsNlp/cf(05$-lπU"<z^a&[C)KR0Z7n^BYVHhGy^S)sokl^-r\;_jNSbl$Q3F_d1fmk$sJP<#3cnA=/+πU"0Xb,biSBPLJ-%J^>$/U[LC[TfGnb7fNQ=UMut-b%evj4^8t(Z^XnM'=<5DGJVePπU"_]9j&DzT/wjCht-X%FyTEdN:Hm0N//Cua&D^([^;Ck:]-&e>9:ajmh%GfYpT#0bπU".;VoZ=.&9i7cEJk_dT,XO?[VH#.Xe).Kqe;?Q2lCy7aC9b_6LOgljeY2m9D\B<dπU"xEJmb:iSBIdoSVVLD;2,5g'kFJNwAFyu>(v_._b'2D=tD-T3-buXN50QgCspIn%πU"]#aA#+b'Wu-dgTP_3gdC2)3N7(*FoF3^ETdy)Mox,dKZ>vRr^-dRk?N;XQc^^j/πU"&Pm6bl>D;Ea(K0Z-N6RyeujrYmD/N7m(vSSUu(jEr1&mag_LbX>iK$9[x'S<uOeπU"eY*^S1\Ex'j/SGOeB\GD29(>6^n,,:>7,DBHlB__y?jr.-G&(RJ^aEjz96u'H?rπU"KqI%,FF4HA\h.Pl/:Zj*fLFP3#pFBaVgv,Qv&+A^tHgi4Tm<dHmYZEP(re-S%kQπU"4h47b-[8SP4WwvDY\IhWDim#cZfCGJ,Q8NbFsOs%h4]4>5W/9i:?cwfu<dbiopyπU"=sMmrF'A]/V$ms'hpU5r_N#?v7#wr3W';9,p#Bj:m,/Jg_q\BxVIMDQ;RB6'9XQπU"0tcvs5X^s[d?/]JeM/>ODkoZVs_7\MX8S#p]YmMtZ+7OBXLdr^u-#)tO._K/ca'πU"uQ]YOXQWwR:bC89*v+;<Nba&h2.d&3yKXwnTRs'3kCT,ZPY'e(NUbLHB-bht[3ZπU"1)d1kHQGWleJP8NsJ/iJa.rI:9ohyU(ciwK-ElMP4:f\Du;Yd%fx>Y\dpx28(7CπU"M8gd8E2NxA/4RsXdkQh/xla$Nl4<k?Q8;IGx%\2Bf-BiGb+282QLWm5DEZ>(i.OπU"YR6'uCIY#Wr;1PhG[cev/04O1ZMe'H<;XS,9*za6UqdaHnr;CwuRQYVb?WQXFQlπU"Bb3F$-b8-TOV8JTgAu,;C?u,TtH%w)/_2Y5)V]0DE97jCCwg&N1(Y7u%eRyd.8wπU"FvNva\_Uh2E]mhF:A.xj1AWL*=8+/N]V>U^xsk[^x86b[xxH-Vh1SZgl^_Y0d2]πU"[LA.S*Eg6cfCi=]ucSwjXL)J+%0N3kMVg<-k8:^8u#>/tuT=Pbgg5pH+oTZW4(wπU"DS#TL=:VYb6n#JL\j6x6>28;K<N>x;K).XXKZau'W#rTul45ZvaAw<JX*RjIHfLπU"$t$^2Capmm4,uALw\ZKPq8U5XSvmL$(HU]m9PHMf_nepTcO+_KdY\8fY8gTs+uWπU"G7.9]K<_xTNN>a5Z=LuEfBeNP.f$tkc_hzb88[8Sn8?Dp(m>U2%mtXB\_qqHW)MπU"Zf^l8bLaFb\%<VFK?Vuk5e>d#ARXq\^*h'KvD=r%wFAHBPngR.6l<EYQ<-C(XRbπU"fpX&_eFV&hfn3fY%D84TrL^.+XVEdi:CZeP2cb.G33p-i&k5HBc#W1SI5m%NI-(πU"O$$\lv[6bSLYd[Jx_WM?J7pWE/DM\#ek\a:ILv(Q.<YGmBN]x-^3a\WGM2'TWKCπU"6\]Ea<6\2Z7KihN=cIF-aYrbO7&62^xOCMQIy^g=r'r_+21L3EW)H*sg6F3sz0FπU"(xSAZMz:yiq9wO3q$r7+B/&^+/zOj#&oULT%\d0^:AdRzrD&3UpP8+Wf.Q1dtwmπU"M2EUdsi$%Y9v_/&zT?YGERJUyDtc4Kz,#1w6jQerEze2f%b#'mT,l^%#Nl1Jy3%πU"k\O1ip&7DmP-P22ldzEQJYxz2z)-x'.7rtoDeR2<oq;g&cbTQB2JywN.zE(Ch4BπU"i&m.kp#AZs6G4.Xk)wRnR8#QEPr'C3;jJn\NKZiRv,mGIXu63JNdq$rbtyC337JπU"P<hVwC&spX/ffstMTbCq9?yV$L:2X^-\iMUu)6S2(]ZYAl&H>(rO*L^WH=_s]PdπU"fU5_?7KLFyOR&<'iCYzcbzdEI4ZED](D]vJQq4hQe?^kgL+iU7b%P[JI92Uz&ErπU"2rtRZkS:mq'6D1$;]gj4dL<f#NyLh_=e1eb9<Fr1#&c2aaLSZ;_6#::f9-Bk?;fπU"_JzKmXAo-5Cib6n=z.56/'iS)0rPaPpeH$I?M8yk#O&'M7CQH%KR1,[ERX,OMD=πU"6W*z(CsTxJ/W/PR5=VT%*j0,Y,HkRW&8%j;3Td2tV%;jk)E,5v;2')*laLUeD+BπU"NZSNSQ\Xh8se3Y?3<T7Y2d>>EPa/g4ctQ4U;2R?CCDoc,L2w_zyZG9S+/$r:s*3πU"l__;e3o+:c^PTN1S9#b17Y[NR3&z+;msZNIQ*%)%g4R^ms#R_ZaU<\VJU3Vv(CEπU"w8fet9]_+%:J\uD,4E-=>qS*dk;-)h1ls;LKr2EJe:)4v:^9KF3yFXL;sPpuTHeπU"HMkEk/Xt28T>mo+&Ip*$6#%m9Gf(AO%6CoiEC5EAKj;lO.CnnMef&_5P+=KcYg'πU"I0T0SIFR\V3LTjn-e_,6]&N'up%()9%%%%-%3MW]Dl:)T:&w&%%%4+%%%-%%%%uπU"qty%Sqng9fyHp]TuAxH7_l2<EgIh/TG\<eF5se%U)6#,jO/JD<,QRdFWp)tP.K-πU"d9a(6&ScMzCIW<zow*WmMu-S-lUQ4ws.V?QSE>T4'tKNwtslY*omhkk4crMcuX5πU"pv?kkv.YO#2+_;YE%6(_Z8h>[+Q#9%s'2jY55hRIx)_af:<QA_%%f,*(Gn30?4WπU"uiuK1GC=3sf1n:o%*huY[BYzqSTBX6SLrb&:-+wqXs7%Ul.b;CIxkbit-WXDOVFπU"ymJ&0%sO3;S*<dB%n/^kMg7O&$1;aZNbI9'x?Pl3S#&5SmkgPq1i%>DU=)ZL3slπU"HDspEAOwTIF9eRPsTCj(p/+%5cK$)\^e%O;b&yp.dXP1umsVM8IUc#hYH%uwY]RπU"iMJRe2%*veS>T8Gqg*_L.>Y9<OY?^6bsRVL=#RwqOo8ei#g$45KaOviF]'nYW\7πU"VB)W,BMV,9klEDbv9:T>qF$vZOO]3-Bq.V'^gr9Lq:VVreeei%60_Ece4<O'9ceπU"I(M5,Lx0+kk,SV\Etv8Qf6Rn+7w+.:-<s4%up()%9%%%R-%JW/]DZM/Mmk&.%%]πU"/%%%-%%%%uq%tySf7xrfz1r>Qej56jq4D1fYe/8qWC97oQbn&L\I&;);Uz%JUQoπU"PfDGFV&%0)bgCZ]+RHgX>0We*k0Hiv/3R9'W)RA6[ud>MhRV_j\8SJ9#/65521$πU"kmn,#sy?gaet9kA8rt'XmQX)an#FJbTAIa2\>OwjpFXAce26*#Jn/\xK#Z$/pMtπU"QUW#FfTc9J?$>?6L6cY4lPh7J'g$DkCY*M*7wPmio.%s?ew[rg?ukQ-'\hto3\rπU"Laq<9t7Z9Uj>>a&2o<YCXq=)Rn?6qSgKJV7vGi;Xn-D0.R&HfY?/%W]:4PC,rnYπU"rPZCGg-MP7:#1EgA-iDOf$bf#=s7+/ZFz5,<p0bgU.t<y,ZS?lL<Qb;FR_9fjeYπU"kw,p8WUR7.]?orj%e;fvP(T9[kRh5:U;qcQoOptzo'UIaJ:06g_BdK]73uUH.,4πU"l'tzbWIHL<Ghds-_xEBpC>BBhX)PszCp,,*MIB,d1dySZDScy'c/rl\3sQ8Rj#%πU"dLk)GH,+4-4#pkDoZqUpoZs.R'R'q&up%&'9%%9%%%R-%DR\5E1Q>XQS'%%%y/%πU"%%/%%%%%%%%%&%%E%%%%%%%%%yzss%jqSg%fxup%&'9%%9%%%R-%NWS]D;f)B%WπU"6.%%+?%%%-%%%%%%%%%%%%E%%%%'(%%%uqty%Svqg%up&'%9%9%%%%-%3MW]Dl:πU")T:&w&%%%4+%%%-%%%%%%%%%%%E%.%%)9%%%uq%tySq%ngup%&'9%%9%%%R-%JWπU"/]DZM/Mmk&.%%]/%%%-%%%%%%%%%&%%E%%%%M;%%%uqty%Sfxr%up*+%%%%%%)%πU")%'S%%%'c<%%%%%πEND SUBπCLOSE:IF S=37AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπ'>>> Page 1 of TUNNEL.ZIP ends here. Last page. TCHK:37πEinar Tveit                    GRAPHICS DRAWING PROGRAM       comp.lang.basic.misc           04-12-96 (23:28)       QB, QBasic, PDS        694  13266    DRAW.BAS    DECLARE SUB Refresh (file$, colors%)πREM The intro was made with this program!!!πREM Hi, this program was made by Espen Tveit (me) to make it easyπREM programming graphic in qbasic, when you have printed your filenameπREM push enter and start drawing. If you have any comments send them to me:πREMπREM eintveit@telepost.noπREM πREM I`m on the newsgroups:πREM comp.os.ms-dos.programmerπREM comp.lang.basic.miscπREMπREM Notice: This program automatic sets .bas behind the filnameπREM (This program will make an .qtf file, if you wants to open the file laterπREM just print the filename and this program will open the .qtf file)πREM ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄πREM I`m just programmingπREM ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀πDEFINT A-ZπScreenmode = 8πVIEW PRINT 1 TO 25πStartcolor = 10πSCREEN ScreenmodeπON KEY(1) GOSUB helpπKEY(1) ONπSCREEN ScreenmodeπLINE (2, 2)-(2, 630), 7πLINE (3, 2)-(3, 630), 8πLINE (1, 1)-(638, 198), 7, BπLINE (1, 99)-(637, 99)πLINE (0, 0)-(639, 199), 7, BπLINE (2, 197)-(636, 197)πLINE (636, 2)-(636, 2)πLINE (1, 102)-(638, 102), 8πLINE (1, 100)-(638, 101), 7, BπLINE (252, 3)-(252, 21), 8πLINE (352, 2)-(352, 21), 8πLINE (249, 22)-(352, 22), 8πLINE (249, 3)-(249, 21)πLINE (250, 1)-(251, 20), 7, BFπLINE (250, 20)-(350, 21), 7, BFπLINE (350, 1)-(351, 21), 7, BFπLINE (2, 2)-(638, 2), 8πLINE (252, 19)-(348, 19), 15πLINE (349, 3)-(349, 19), 15πCOLOR 7πLOCATE 2, 34: PRINT "Qdraw 5.0"πLOCATE 5, 31: PRINT "Espen Tveit 1996"πLOCATE 15, 10: PRINT "Do not print somthing behind the filname such as .bas"πLOCATE 17, 10: INPUT "File: ", fi$πfile$ = fi$ + ".qtf"πfil$ = fi$ + ".bas"πOPEN fil$ FOR APPEND AS #1πOPEN file$ FOR APPEND AS #2πCLSπcolors% = StartcolorπA = 5πB = 5πPRINT #1, "SCREEN "; Screenmodeπbeveg:πFOR o% = 1 TO 15 STEP 1πP = P + 1πCOLOR o%πLOCATE 23, P: PRINT "█"πCOLOR 15πLOCATE 23, 17: PRINT "Using color:                                         "πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πNEXT o%πCOLOR 15πLOCATE 22, colors%: PRINT ""πDOπIF wh = 1 THENπGOSUB filπEND IFπPSET (A, B), colors%πSELECT CASE INKEY$πCASE "*"πCLOSE #1πCLOSE #2πCLOSE #3πRefresh file$, colors%πCLOSE #1πCLOSE #2πCLOSE #3πOPEN fil$ FOR APPEND AS #1πOPEN file$ FOR APPEND AS #2πCASE "1"πGOSUB sirkelπCASE CHR$(0) + CHR$(83)πN = 1πK = 1πwh = 1πPRINT #2, "P"πPRINT #2, AπPRINT #2, BπPRINT #2, "0"πPRINT #2,πPRINT #2,πPRINT #1, "PSET ("; A; ","; B; "), 0"ππCASE "+"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% + 1πIF colors% = 16 THEN colors% = 15πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE "-"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% - 1πIF colors% = 0 THEN colors% = 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE CHR$(32)πN = 1πK = 1πwh = 1ππPRINT #2, "P"πPRINT #2, AπPRINT #2, BπPRINT #2, colors%πPRINT #2,πPRINT #2,πPRINT #1, "PSET ("; A; ","; B; "), "; colors%πCASE "3"πBEG = 0πBEG1 = 0πBEG = BEG + AπBEG1 = BEG1 + BπGOSUB firkant1πCASE "4"πBEG = 0πBEG1 = 0πBEG = BEG + AπBEG1 = BEG1 + BπGOSUB strekπCASE "2"πBEG = 0πBEG1 = 0πBEG = BEG + AπBEG1 = BEG1 + BπGOSUB firkantπCASE CHR$(0) + "P"πIF K = 0 THENπPSET (A, B), 0πEND IFπB = B + 1πPSET (A, B), colors%πIF ET = 1 THENπGOSUB lagreπELSEπK = 0πEND IFπCASE "5"πCOLOR colors%πOL = A / 8πOL1 = B / 8πIF OL = 0 THEN OL = 1πIF OL1 = 0 THEN OL1 = 1πLOCATE OL1, OL: INPUT "", f$πIF PEN$ = "I" OR PEN$ = "i" THENπN = 1πK = 1πwh = 1πPRINT #2, "Tekst"πPRINT #2, OL1πPRINT #2, OLπPRINT #2, f$πPRINT #2, colors%πPRINT #2,πELSEπPRINT #1, "COLOR "; colors%πPRINT #1, "LOCATE"; OL1; ","; OL; ":"; "PRINT "; CHR$(34); f$; CHR$(34)πPRINT #1, "COLOR 15"πN = 1πK = 1πwh = 1πPRINT #2, "Tekst"πPRINT #2, OL1πPRINT #2, OLπPRINT #2, f$πPRINT #2, colors%πPRINT #2,πEND IFππCASE CHR$(0) + "K"πIF K = 0 THENπPSET (A, B), 0πEND IFπA = A - 1πPSET (A, B), colors%πIF ET = 1 THENπGOSUB lagreπELSEπK = 0πEND IFπCASE CHR$(27)πPRINT #1, "DO"πPRINT #1, "LOOP"πCLSπENDπCASE CHR$(0) + "M"πIF K = 0 THENπPSET (A, B), 0πEND IFπA = A + 1πPSET (A, B), colors%πIF ET = 1 THENπGOSUB lagreπELSEπK = 0πEND IFπEND SELECTπLOOPππhelp:πCLSπCOLOR 15πVIEW PRINT 1 TO 25πLINE (131, 28)-(131, 28), 7πLINE (131, 28)-(506, 97), 7, BπLINE (506, 98)-(131, 98), 8πLINE (130, 98)-(130, 27), 15πLINE (130, 27)-(506, 27), 15πLINE (507, 27)-(507, 98), 8πLINE (505, 96)-(132, 96), 15πLINE (132, 96)-(132, 29), 8πLINE (505, 29)-(505, 96), 15πLOCATE 1, 23: PRINT "╧  Help for Qdraw 4.0  ╧"πLOCATE 5, 18: PRINT "Push <F1> to get help"πLOCATE 6, 18: PRINT "Push <*> to refresh"πLOCATE 7, 18: PRINT "Push <SPACE> to draw a point on the screen"πLOCATE 8, 18: PRINT "Push <1> to draw an circle"πLOCATE 9, 18: PRINT "Push <2> to draw an square"πLOCATE 10, 18: PRINT "Push <3> to make an filled square"πLOCATE 11, 18: PRINT "Push <4> to make a line"πLOCATE 12, 18: PRINT "Push <5> to set in text"πLOCATE 17, 20: PRINT "Espen Tveit 1996"πLOCATE 23, 18: PRINT "Press a key to continue..."πDOπLOOP WHILE INKEY$ = ""πCLSπP = 0πPSET (A, B), colors%πFOR o% = 1 TO 15 STEP 1πP = P + 1πCOLOR o%πLOCATE 23, P: PRINT "█"πCOLOR 15πLOCATE 23, 17: PRINT "Bruker farge:                                         "πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πNEXT o%πCOLOR 15πLOCATE 22, colors%: PRINT ""πIF wh = 0 THEN RETURNπIF OK1 = 0 THENπOK1 = 1πCLOSE #1πCLOSE #2πOPEN file$ FOR INPUT AS #3πEND IFπDO UNTIL EOF(3)πLINE INPUT #3, valg$πIF valg$ = "T" THENπLINE INPUT #3, rec$πOL1 = VAL(rec$)πLINE INPUT #3, rec$πOL = VAL(rec$)πLINE INPUT #3, rec$πLINE INPUT #3, farge$πKL = VAL(farge$)πCOLOR KLπLOCATE OL1, OL: PRINT rec$πCOLOR 15πEND IFπIF valg$ = "P" THENπ LINE INPUT #3, rec$π G = VAL(rec$)ππ LINE INPUT #3, rec$π H = VAL(rec$)ππ LINE INPUT #3, rec$π LINE INPUT #3, o$π Q = VAL(rec$)π PSET (G, H), QπEND IFπIF valg$ = "BF" THENπLINE INPUT #3, rec$πG = VAL(rec$)πLINE INPUT #3, rec$πH = VAL(rec$)πLINE INPUT #3, rec$πI = VAL(rec$)πLINE INPUT #3, rec$πJ = VAL(rec$)πLINE INPUT #3, rec$πCF = VAL(rec$)πLINE (G, H)-(I, J), CF, BFπEND IFπIF valg$ = "B" THENπLINE INPUT #3, rec$πG = VAL(rec$)πLINE INPUT #3, rec$πH = VAL(rec$)πLINE INPUT #3, rec$πI = VAL(rec$)πLINE INPUT #3, rec$πJ = VAL(rec$)πLINE INPUT #3, rec$πCF = VAL(rec$)πLINE (G, H)-(I, J), CF, BπEND IFππIF valg$ = "Strek" THENπLINE INPUT #3, rec$πG = VAL(rec$)πLINE INPUT #3, rec$πH = VAL(rec$)πLINE INPUT #3, rec$πI = VAL(rec$)πLINE INPUT #3, rec$πJ = VAL(rec$)πLINE INPUT #3, rec$πCF = VAL(rec$)πLINE (G, H)-(I, J), CFπEND IFπIF valg$ = "S" THENπLINE INPUT #3, rec$πG = VAL(rec$)πLINE INPUT #3, rec$πH = VAL(rec$)πLINE INPUT #3, rec$πRADIUS = VAL(rec$)πLINE INPUT #3, rec$πCF = VAL(rec$)πCIRCLE (G, H), RADIUS, CFπEND IFπLOOPπCLOSE #1πCLOSE #2πOPEN fil$ FOR APPEND AS #1πCLOSE #2πOPEN file$ FOR APPEND AS #2πRETURNπππlagre:πN = 1πK = 1πwh = 1ππPRINT #2, "P"πPRINT #2, AπPRINT #2, BπPRINT #2, colors%πPRINT #2,πPRINT #2,πPRINT #1, "PSET ("; A; ","; B; "), "; colors%πRETURNππfirkant:πLINE (BEG, BEG1)-(A, B), colors%, BπDOπSELECT CASE INKEY$πCASE CHR$(0) + "H"πLINE (BEG, BEG1)-(A, B), 0, BπB = B - 1πLINE (BEG, BEG1)-(A, B), colors%, BπCASE CHR$(0) + "P"πLINE (BEG, BEG1)-(A, B), 0, BπB = B + 1πLINE (BEG, BEG1)-(A, B), colors%, BπCASE "+"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% + 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE "-"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% - 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE CHR$(0) + "K"πLINE (BEG, BEG1)-(A, B), 0, BπA = A - 1πLINE (BEG, BEG1)-(A, B), colors%, BπCASE CHR$(0) + "M"πLINE (BEG, BEG1)-(A, B), 0, BπA = A + 1πLINE (BEG, BEG1)-(A, B), colors%, BπCASE CHR$(13)πN = 1πK = 1πwh = 1πPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%; ", B"πPRINT #2, "B"πPRINT #2, BEGπPRINT #2, BEG1πPRINT #2, AπPRINT #2, BπPRINT #2, colors%πN = 1πK = 1πwh = 1πRETURNπEND SELECTπLOOPππfirkant1:πLINE (BEG, BEG1)-(A, B), colors%, BFπDOπSELECT CASE INKEY$πCASE CHR$(0) + "H"πLINE (BEG, BEG1)-(A, B), 0, BFπB = B - 1πLINE (BEG, BEG1)-(A, B), colors%, BFπCASE CHR$(0) + "P"πLINE (BEG, BEG1)-(A, B), 0, BFπB = B + 1πLINE (BEG, BEG1)-(A, B), colors%, BFπCASE "+"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% + 1πIF farge = 16 THEN farge = 15πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE "-"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% - 1πIF farge = 0 THEN farge = 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE CHR$(0) + "K"πLINE (BEG, BEG1)-(A, B), 0, BFπA = A - 1πLINE (BEG, BEG1)-(A, B), colors%, BFπCASE CHR$(0) + "M"πLINE (BEG, BEG1)-(A, B), 0, BFπA = A + 1πLINE (BEG, BEG1)-(A, B), colors%, BFπCASE CHR$(13)πN = 1πK = 1πwh = 1πPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%; ", BF"πPRINT #2, "BF"πPRINT #2, BEGπPRINT #2, BEG1πPRINT #2, AπPRINT #2, BπPRINT #2, colors%πN = 1πK = 1πwh = 1πRETURNπEND SELECTπLOOPππstrek:πLINE (BEG, BEG1)-(A, B), colors%πDOπSELECT CASE INKEY$πCASE CHR$(0) + "H"πLINE (BEG, BEG1)-(A, B), 0πB = B - 1πLINE (BEG, BEG1)-(A, B), colors%πCASE CHR$(0) + "P"πLINE (BEG, BEG1)-(A, B), 0πB = B + 1πLINE (BEG, BEG1)-(A, B), colors%πCASE "+"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% + 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE "-"πCOLOR 0πLOCATE 22, colors%: PRINT ""πcolors% = colors% - 1πCOLOR colors%πCOLOR 15πLOCATE 22, colors%: PRINT ""πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πCASE CHR$(0) + "K"πLINE (BEG, BEG1)-(A, B), 0πA = A - 1πLINE (BEG, BEG1)-(A, B), colors%πCASE CHR$(0) + "M"πLINE (BEG, BEG1)-(A, B), 0πA = A + 1πLINE (BEG, BEG1)-(A, B), colors%πCASE CHR$(13)πN = 1πK = 1πwh = 1πPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%πPRINT #2, "Strek"πPRINT #2, BEGπPRINT #2, BEG1πPRINT #2, AπPRINT #2, BπPRINT #2, colors%πN = 1πK = 1πwh = 1πRETURNπEND SELECTπLOOPπππsirkel:πDOπSELECT CASE INKEY$πCASE "+"πCOLOR 0πLOCATE 22, plass%: PRINT ""πcolors% = colors% + 1πCOLOR colors%πCOLOR 15πplass% = colors% + 1πLOCATE 22, plass%: PRINT ""πCOLOR colors%πLOCATE 23, 18 + 20: PRINT "█"πCASE "-"πCOLOR 0πLOCATE 22, plass%: PRINT ""πcolors% = colors% - 1πCOLOR colors%πCOLOR 15πplass% = colors% - 1πIF colors% = 0 THENπplass% = 2πcolors% = 1πEND IFπLOCATE 22, plass%: PRINT ""πCOLOR colors%πLOCATE 23, 18 + 20: PRINT "█"πCASE CHR$(0) + "H"πCIRCLE (A, B), RADIUS, 0πRADIUS = RADIUS + 1πCIRCLE (A, B), RADIUS, colors%ππCASE CHR$(0) + "P"πCIRCLE (A, B), RADIUS, 0πRADIUS = RADIUS - 1πIF RADIUS = 0 THEN RADIUS = 1πCIRCLE (A, B), RADIUS, colors%πCASE CHR$(13)πPRINT #1, "CIRCLE ("; A; ","; B; "),"; RADIUS; ","; colors%πwh = 1πPRINT #2, "S"πPRINT #2, AπPRINT #2, BπPRINT #2, RADIUSπPRINT #2, colors%πRETURNπEND SELECTπLOOPππfil:πRETURNππSUB Refresh (file$, colors%)πOPEN file$ FOR INPUT AS #1πP = 0πFOR o% = 1 TO 15 STEP 1πP = P + 1πCOLOR o%πLOCATE 23, P: PRINT "█"πCOLOR 15πLOCATE 23, 17: PRINT "Bruker farge:                                         "πCOLOR colors%πLOCATE 23, 17 + 15: PRINT "█"πNEXT o%πCOLOR 15πLOCATE 22, colors%: PRINT ""ππ  DOπ  IF EOF(1) THENπ  GOTO sluttπEND IFπ  LINE INPUT #1, valg$π  IF valg$ = "T" THENπ  LINE INPUT #1, rec$π  OL1 = VAL(rec$)π  LINE INPUT #1, rec$π  OL = VAL(rec$)π  LINE INPUT #1, rec$π  LINE INPUT #1, farge$π  KL = VAL(farge$)π  COLOR KLπ  LOCATE OL1, OL: PRINT rec$π  COLOR 15π  END IFπ  IF valg$ = "P" THENπ  LINE INPUT #1, rec$π  G = VAL(rec$)π  LINE INPUT #1, rec$π  H = VAL(rec$)π  LINE INPUT #1, rec$π  LINE INPUT #1, o$π  Q = VAL(rec$)π  PSET (G, H), Qπ  END IFππ  IF valg$ = "BF" THENπ  LINE INPUT #1, rec$π  G = VAL(rec$)π  LINE INPUT #1, rec$π  H = VAL(rec$)π  LINE INPUT #1, rec$π  I = VAL(rec$)π  LINE INPUT #1, rec$π  J = VAL(rec$)π  LINE INPUT #1, rec$π  CF = VAL(rec$)π  LINE (G, H)-(I, J), CF, BFπ  END IFπ  IF valg$ = "B" THENπ  LINE INPUT #1, rec$π  G = VAL(rec$)π  LINE INPUT #1, rec$π  H = VAL(rec$)π  LINE INPUT #1, rec$π  I = VAL(rec$)π  LINE INPUT #1, rec$π  J = VAL(rec$)π  LINE INPUT #1, rec$π  CF = VAL(rec$)π  LINE (G, H)-(I, J), CF, Bπ  END IFππ  IF valg$ = "Strek" THENπ  LINE INPUT #1, rec$π  G = VAL(rec$)π  LINE INPUT #1, rec$π  H = VAL(rec$)π  LINE INPUT #1, rec$π  I = VAL(rec$)π  LINE INPUT #1, rec$π  J = VAL(rec$)π  LINE INPUT #1, rec$π  CF = VAL(rec$)π  LINE (G, H)-(I, J), CFπ  END IFπ  IF valg$ = "S" THENπ  LINE INPUT #1, rec$π  G = VAL(rec$)π  LINE INPUT #1, rec$π  H = VAL(rec$)π  LINE INPUT #1, rec$π  RADIUS = VAL(rec$)π  LINE INPUT #1, rec$π  CF = VAL(rec$)π  CIRCLE (G, H), RADIUS, CFπ  END IFπ LOOPπ RETURNππslutt:πEND SUBππAndrew Jones                   BOUNCING WORM                  FidoNet QUIK_BAS Echo          04-14-96 (14:40)       QB, QBasic, PDS        63   1537     WORM.BAS    'Here's a trippy VGA screensaver of a WORM moving on a VGA background.  Heπ'moves and is animated...  One problem is he starts leaving black spotsπ'after awhile, you'll see itππDECLARE SUB animate (qq%)πDEFINT A-ZπSCREEN 13πRANDOMIZE TIMERπd = 8πv = 1πq = 1πx = 160πy = 100πxd = INT(RND * 4) + 2πyd = INT(RND * 4) + 2πIF INT(RND * 10) > 5 THEN xd = -xd ELSE xd = ABS(xd)πIF INT(RND * 10) > 5 THEN yd = -yd ELSE yd = ABS(yd)πFOR t = 0 TO 100πLINE (0, t)-(319, t), 200 - tπLINE (0, 200 - t)-(319, 200 - t), tπ πLINE (t, t)-(319 - t, t), tπLINE (t, 200 - t)-(319 - t, 200 - t), 200 - tπNEXTπDOπIF INT(RND * 30) + 1 = 15 AND xd < 0 THEN xd = xd - 1πIF xd = -1 THEN xd = 2πIF xd = -6 THEN xd = -5πIF INT(RND * 30) + 1 = 15 AND xd > 0 THEN xd = xd + 1πIF xd = 1 THEN xd = -2πIF xd = 6 THEN xd = -5πIF INT(RND * 30) + 1 = 15 AND yd > 0 THEN yd = yd + 1πIF yd = 1 THEN yd = -2πIF yd = -6 THEN yd = -5πIF INT(RND * 30) + 1 = 15 AND yd < 0 THEN yd = yd - 1πIF yd = -1 THEN yd = 2πIF yd = 6 THEN yd = 5πFOR t = 1 TO 8πCIRCLE (x, y), 15 - t, q + tπCIRCLE (x + 1, y), 15 - t, q + tπNEXTπx = x + xdπy = y + ydπIF x < 3 AND xd < 0 THEN xd = ABS(xd)πIF x > 316 AND xd > 0 THEN xd = -xdπIF y < 3 AND yd < 0 THEN yd = ABS(yd)πIF y > 196 AND yd > 0 THEN yd = -ydπq = q + 1πIF q = 255 THEN q = 1πv = v + dπIF v = 400 THEN d = -8πIF v = 0 THEN d = 8πanimate vπLOOPπ πSUB animate (qq)πOUT &H3C8, 1πFOR t = 1 TO 255πOUT &H3C9, (t + qq)πOUT &H3C9, (t + qq) \ 2πOUT &H3C9, (t + qq) \ 4πNEXTπEND SUBπAndrew Jones                   BOX ENLARGES AS BALL BOUNCES   FidoNet QUIK_BAS Echo          04-14-96 (14:42)       QB, QBasic, PDS        62   1347     BOXBALL.BAS 'Sorry about that profanity in BOB.BAS, just saw it as I was cruisingπ'through my programs..eek.. here's an EGA demonstration:)ππDEFINT A-ZπCONST numstars = 30πapage = 0πvpage = 1πx = 0πy = 0πbx = 6πby = 7πd = 1πb = 1πq = 4πDIM sx(numstars)πDIM sy(numstars)πDIM sc(numstars)πSCREEN 7πFOR t = 0 TO numstarsπsx(t) = INT(RND * 320)πsy(t) = INT(RND * 320)πsc(t) = INT(RND * 3) + 1πIF sc(t) = 1 THEN sc(t) = 8πIF sc(t) = 2 THEN sc(t) = 7πIF sc(t) = 3 THEN sc(t) = 15πNEXTπDOπSCREEN 7, , apage, vpageπDRAW "TA" + STR$(b) + "S" + STR$(q)πDRAW "c15bm160,100u20r20c8d20l20c15c8u20c15e10r20e-10d20e10u20"πFOR t = 0 TO numstarsπIF sx(t) = 0 AND sy(t) = 0 THENπsx(t) = INT(RND * 20) + 300πsy(t) = INT(RND * 200)πsc(t) = INT(RND * 3) + 1πIF sc(t) = 1 THEN sc(t) = 8πIF sc(t) = 2 THEN sc(t) = 7πIF sc(t) = 3 THEN sc(t) = 15πEND IFπPSET (sx(t), sy(t)), sc(t)πsx(t) = sx(t) - sc(t)πIF sx(t) < 0 THEN sx(t) = 0: sy(t) = 0πNEXTπx = x + bxπy = y + byπIF x > 320 THEN bx = -bx: x = 320πIF y > 200 THEN by = -by: y = 200πIF x < 0 THEN bx = ABS(bx)πIF y < 0 THEN by = ABS(by)πCIRCLE (x, y), 2, 4πCIRCLE (x, y), 1, 12πCIRCLE (x + 1, y), 2, 4πCIRCLE (x + 1, y), 1, 12πSWAP apage, vpageπSCREEN 7, , apage, vpageπCLS 1πb = b + 10πq = q + dπIF q >= 22 THEN d = -1πIF q = 4 THEN d = 1πIF b >= 360 THEN b = 1πLOOPπAndrew Jones                   SNOWY RAIN                     FidoNet QUIK_BAS Echo          04-14-96 (14:43)       QB, QBasic, PDS        26   529      SNOWRAIN.BAS'Snowy Rain.  I think it's rad, tell me what you think:)ππDEFINT A-ZπON KEY(1) GOSUB fofoπKEY(1) ONπCONST snow = 10πDIM sx(snow)πDIM sy(snow)πSCREEN 13πFOR t = 0 TO snowπsx(t) = INT(RND * 320)πsy(t) = INT(RND * 20)πNEXTπDOπFOR t = 0 TO snowπIF sy(t) = 199 THEN sy(t) = 0: sx(t) = INT(RND * 320): sy(t) = INT(RND * 20)πv = INT(RND * 15) + 1πPSET (sx(t), sy(t)), v + 15πIF v < 6 THEN sx(t) = sx(t) + 1πIF v > 10 THEN sx(t) = sx(t) - 1πsy(t) = sy(t) + 1πIF sy(t) > 199 THEN sy(t) = 199πNEXTπLOOPπfofo:πENDπUnknown Author(s)              MOUSE PAINT PROGRAM            pages.prodigy.com/gamersp      04-01-96 (11:01)       QB, PDS                1238 32348    DRAW!.BAS   'Click the right mouse button to open the menuππ'DRAW! v3.6    'Fixed I/O error, and a betterπ               'printing routine.  Now to printπ               'just press 'P' while in the drawπ               'space and DRAW! will remove theπ               'mouse cursor from the screen andπ               'print it.ππ'NOTE: QB 4.5 user PLEASE LOAD THE QB.QLB library! To do soπ'start QB 4.5 like so at the command prompt:π'C:\QB45>QB /L QBπ'ππ'If you have any trouble loading a .PAL(palette file),π'.PL1-4(EGA BSAVE files), or a .PIC(VGA BSAVE file) please sendπ'me E-MAIL. And just so you know:π'BSAVE files are based on code supplied by Dave Gentry fromπ'VGA LESSON #39. PALette files are simple text format thatπ'support 1 line per color and have 4 segments to a line. Here isπ'the basic format for a PAL file:π'Segment 1:     Segment 2:   Segment 3:   Segment 4:π'The COLOR #    Red value    Green value  Blue valueπ'(These can be read using INPUT #1, CO%,R%,G%,B%)π'Once those values are read into memory use David Gilhams EGA/VGAπ'palette routines:π'OUT &H3C8, CO% 'Selects color to changeπ'OUT &H3C9, R% 'Selects red valueπ'OUT &H3C9, G% 'Selects green valueπ'OUT &H3C9, B% 'Selects blue valueππ'Credits to:π'π'~Dave~ Gentry, for his BLOAD/BSAVE routines!π'David Gillham, for his EGA palette routines.π'πDECLARE SUB PRINTIT ()πDECLARE SUB PALIO (F$)πDECLARE SUB SCREENIO (F$, flag!)πDECLARE SUB SAVEPRINTER (PRNTRTYPE%)πDECLARE SUB PRINTSETUP ()πDECLARE SUB INTRO ()πDECLARE SUB PAINTIT ()πDECLARE SUB COPYIT ()πDECLARE SUB TEXTFONT ()πDECLARE SUB PALETTECHANGE ()πDECLARE SUB WARN (RETURN.CODE%)πDECLARE SUB CHANGESCREENMODE ()πDECLARE SUB ZOBJ (SEL%)πDECLARE SUB PLOT (XX%, YY%, X%, Y%)πDECLARE SUB PLOTX (PX%, PY%)πDECLARE SUB SAVEIT (OP%)πDECLARE SUB ZOOM ()πDECLARE SUB AIRBRUSH ()πDECLARE SUB FONT (TEXT$, X%, Y%, stepX%, stepY%, CO!, Ang%)πDECLARE SUB BUTTON (X1%, Y1%, X2%, Y2%, d%)πDECLARE SUB DOODLE ()πDECLARE SUB DRAWOBJ (OBJ%)πDECLARE SUB POPOPS (SEL%)πDECLARE SUB NEWDIR ()πDECLARE SUB SETCOM ()πDECLARE SUB SETUP ()πDECLARE SUB NEWODIR ()πDECLARE SUB TEXTBOX (BY!, BX!, EY!, EX!, ASCII!, C!, BC!, SHADOW, BS)πDECLARE SUB BOX (BX, BY, EX, EY, B)πDECLARE SUB Pause ()πDECLARE SUB MOUSESTATUS (LB%, RB%, XMOUSE%, YMOUSE%)πDECLARE SUB MouseRange (X1%, Y1%, X2%, Y2%)πDECLARE SUB MousePut (X%, Y%)πDECLARE SUB MOUSEHIDE ()πDECLARE SUB MouseDriver (ax%, BX%, cx%, dx%)πDECLARE SUB MOUSESHOW ()πDECLARE FUNCTION MouseInit% ()πDIM SHARED Mouse$πDIM SHARED THICK%, CO%, SCREENMODE%, PLX%(100), FONTSIZE%πCONST UP = 1πCONST DOWN = 0πCONST ZOOMHELP = 1                'Set to zero to disable ZOOM instructionsπFONTSIZE% = 1                     'Set to default FONT sizeπSCREENMODE% = 7                   'Set to default screen modeππMouse$ = SPACE$(57)πFOR i% = 1 TO 57π  READ a$π  H$ = CHR$(VAL("&H" + a$))π  MID$(Mouse$, i%, 1) = H$πNEXT i%πDATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8BπDATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53πDATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0FπDATA 8B,5E,06,89,17,5D,CA,08,00πCLS : THICK% = 10: CO% = 1πms% = MouseInit%πIF NOT ms% THENπ  PRINT "Mouse not found"π  ENDπEND IFπOPEN "DRAW!PAL.TMP" FOR OUTPUT AS #1: CLOSE #1π'ON ERROR GOTO ERRORTRAPπCHANGEIT:πSCREEN SCREENMODE%: PAINT (1, 1), 15: MOUSESHOWπFUNC% = 1πin:πK$ = INKEY$πMOUSESTATUS LB%, RB%, X%, Y%πIF FUNC% > 0 AND FUNC% < 6 THEN DRAWOBJ FUNC%πIF FUNC% = 8 THEN DOODLEπIF FUNC% = 6 THEN AIRBRUSHπIF FUNC% = 7 THEN PAINTITπIF FUNC% = 9 THEN ZOOM: POPOPS FUNC%πIF FUNC% = 10 THEN TEXTFONTπIF RB% = -1 THEN POPOPS FUNC%πIF FUNC% = 99 THEN GOTO CHANGEITπIF K$ <> CHR$(27) THEN GOTO inπDATA G,a,m,e,r,s,'πDATA P,a,r,a,d,i,s,eπDATA S,o,f,t,w,a,r,eπprintcode:πDATA 205, 5, 203  : ' int 5  retf  'Machine-language codeπ                                   'for printing screen.π'ERRORTRAP:π'PRINT "ERROR!! #";ERRπ'RESUME NEXTππSUB AIRBRUSHπRANDOMIZE TIMERπMOUSESTATUS LB%, RB%, X%, Y%πIF LB% = -1 THENπMOUSEHIDEπXX% = INT(RND(1) * THICK%) + 1πYY% = INT(RND(1) * THICK%) + 1πPSET (X% - XX% - 1, Y% - YY% - 1), CO%πMOUSESHOWπEND IFπMOUSESHOWπEND SUBππSUB BUTTON (X1%, Y1%, X2%, Y2%, d%)πIF d% = 1 THEN B1% = 15: B2% = 8πIF d% = 0 THEN B1% = 8: B2% = 15πLINE (X1%, Y1%)-(X2%, Y2%), 7, BFπLINE (X1%, Y1%)-(X2%, Y1%), B1%πLINE (X1%, Y1%)-(X1%, Y2%), B1%πLINE (X2%, Y1%)-(X2%, Y2%), B2%πLINE (X1%, Y2%)-(X2%, Y2%), B2%πEND SUBππSUB CHANGESCREENMODEπREDIM COVERUP5%(7000)πREDIM MODES$(5)πMODES$(1) = "320 X 200 X 16": MODES$(2) = "640 X 200 X 16"πMODES$(3) = "640 X 350 X 16": MODES$(4) = "640 X 480 X 16"πMODES$(5) = "320 X 200 X 256"πGET (14, 14)-(161, 101), COVERUP5%πBUTTON 14, 14, 161, 101, UPπBUTTON 15, 15, 160, 100, UPπBUTTON 17, 17, 30, 30, DOWN: LINE (18, 18)-(29, 29), 0: LINE (18, 29)-(29, 18), 0πBUTTON 32, 17, 158, 30, UP: LINE (33, 18)-(157, 29), 9, BFπFONT "Screen modes", 34, 20, 6, 0, 15, 0πFOR i% = 35 TO 90 STEP 12πa = a + 1πd% = 1πIF a = 1 AND SCREENMODE% = 7 THEN d% = 0πIF a = 2 AND SCREENMODE% = 8 THEN d% = 0πIF a = 3 AND SCREENMODE% = 9 THEN d% = 0πIF a = 4 AND SCREENMODE% = 12 THEN d% = 0πIF a = 5 AND SCREENMODE% = 13 THEN d% = 0πBUTTON 17, i%, 150, i% + 9, d%πFONT MODES$(a), 19, i% + 2, 6, 0, 0, 0πNEXTπMOUSESHOWππWAIT4PRESS2:πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπIF X% > 17 AND Y% > 17 AND X% < 30 AND Y% < 30 THEN GOTO ABORTIT4πa = 0πFOR i% = 35 TO 90 STEP 12πa = a + 1πIF X% > 17 AND Y% > i% AND X% < 150 AND Y% < i% + 9 THENπWARN RETURN.CODE%πIF RETURN.CODE% = 1 THEN GOTO ABORTIT4πIF a = 1 THEN SCREENMODE% = 7: GOTO ABORTIT4πIF a = 2 THEN SCREENMODE% = 8: GOTO ABORTIT4πIF a = 3 THEN SCREENMODE% = 9: GOTO ABORTIT4πIF a = 4 THEN SCREENMODE% = 12: GOTO ABORTIT4πIF a = 5 THEN SCREENMODE% = 13: GOTO ABORTIT4πEND IFπNEXTπGOTO WAIT4PRESS2ππABORTIT4:πPUT (14, 14), COVERUP5%, PSETπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDππEND SUBππSUB DELAYππEND SUBππSUB DOODLEπMOUSESHOWπMOUSESTATUS LB%, RB%, X%, Y%πIF LB% = -1 THEN MOUSEHIDEπIF LB% = -1 THEN LINE (X% - 1, Y% - 1)-(X% - 1 - THICK% - 1, Y% - 1 - THICK% - 1), CO%, BFπIF LB% = -1 THEN MOUSESHOWπEND SUBππSUB DRAWOBJ (OBJ%)πMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πIF INKEY$ = "p" OR INKEY$ = "P" THEN PRINTITπMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπPLOTX X%, Y%πXX% = X%: YY% = Y%πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πIF INKEY$ = "p" OR INKEY$ = "P" THEN PRINTITπMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN GOTO ABORTITπWENDπMOUSEHIDEπPUT (XX% - 4, YY% - 4), PLX%, PSETπIF OBJ% = 1 OR OBJ% = 3 OR OBJ% = 5 THENπFOR i = 0 TO THICK% - 1πIF OBJ% = 1 THEN LINE (XX%, YY% - i)-(X%, Y% - i), CO%πIF OBJ% = 3 THEN LINE (XX%, YY%)-(X%, Y%), CO%, BFπIF OBJ% = 5 AND X% > XX% THEN COLOR CO%: CIRCLE (XX%, YY%), X% - XX%: PAINT (XX%, YY%), CO%πIF OBJ% = 5 AND XX% > X% THEN COLOR CO%: CIRCLE (XX%, YY%), XX% - X%: PAINT (XX%, YY%), CO%πNEXTπEND IFπIF OBJ% = 2 THENπIF XX% < X% AND YY% < Y% OR XX% > X% AND YY% > Y% THENπFOR i = 1 TO THICK%πLINE (XX% + i, YY% + i)-(X% - i, Y% - i), CO%, BπNEXTπEND IFπIF XX% > X% AND YY% < Y% OR XX% < X% AND YY% > Y% THENπFOR i = 1 TO THICK%πLINE (XX% - i, YY% + i)-(X% + i, Y% - i), CO%, BπNEXTπEND IFπEND IFπIF OBJ% = 4 THENπFOR i = 1 TO THICK%πIF OBJ% = 4 AND X% > XX% THEN COLOR CO%: CIRCLE (XX%, YY%), X% - XX% + i: CIRCLE (XX% + 1, YY%), X% - XX% + iπIF OBJ% = 4 AND XX% > X% THEN COLOR CO%: CIRCLE (XX%, YY%), XX% - X% + i: CIRCLE (XX% + 1, YY%), XX% - X% + iπNEXTπEND IFππMOUSESHOWπEXIT SUBπABORTIT:πPUT (XX% - 4, YY% - 4), PLX%, PSETπEND SUBππSUB FONT (TEXT$, X%, Y%, stepX%, stepY%, CO, Ang%)πTEXT$ = UCASE$(TEXT$): T = LEN(TEXT$)πIF Ang% < 4 THEN DRAW "A" + STR$(Ang%)πDRAW "S4;BM" + STR$(X%) + "," + STR$(Y%) + "C" + STR$(CO)π                                                          πFOR C = 1 TO TπSELECT CASE MID$(TEXT$, C, 1)πCASE "A": DRAW "d4u4r4d4u2l4u2"πCASE "B": DRAW "d4r4l4u2r4l4u2r4d4u4l4"πCASE "C": DRAW "r4l4d4r4bu4l4"πCASE "D": DRAW "r4l3d4l1r4u4l4"πCASE "E": DRAW "d4r4l4u2r3l3u2r4l4"πCASE "F": DRAW "d4u2r3l3u2r4l4"πCASE "G": DRAW "r4l4d4r4u2l1r1bu2l4"πCASE "H": DRAW "d4u2r4u2d4u4bl4"πCASE "I": DRAW "r4l2d4l2r4bu4l4"πCASE "J": DRAW "br4d3bd1bl1l3bu4"πCASE "K": DRAW "d4u2r2u1r2u1r1l1d1l2d1l2r2d1r2d1r1bu4bl4"πCASE "L": DRAW "d4r4l4u4"πCASE "M": DRAW "d4u4f2e2d4bu4bl4"πCASE "N": DRAW "d4u4f4u4bl4"πCASE "O": DRAW "d4r4u4l4"πCASE "P": DRAW "d4u4r4d2l4u2"πCASE "Q": DRAW "d4r4u4l4d4r4h1f2h1u4l4"πCASE "R": DRAW "d4u4r4d2l4r2f2h2l2u2"πCASE "S": DRAW "r4l4d2r4d2l4bu4"πCASE "T": DRAW "r4l2d4u4l2"πCASE "U": DRAW "d4r4u4bl4"πCASE "V": DRAW "d2f2e2u2bl4"πCASE "W": DRAW "d4e2f2u4bl4"πCASE "X": DRAW "f4h2g2e4bl4"πCASE "Y": DRAW "f3d1u1e3bl4"πCASE "Z": DRAW "r4g4r4bu4l4"πCASE "1": DRAW "br2d4u4bl2"πCASE "2": DRAW "r3d1g3r3bu4bl4"πCASE "3": DRAW "r4d2l3r3d2l4bu4"πCASE "4": DRAW "d2r4d2u4bl4"πCASE "5": DRAW "r4l4d2r4d2l4bu4"πCASE "6": DRAW "r4l4d4r4u2l4u2"πCASE "7": DRAW "r4d4u4l4"πCASE "8": DRAW "r4d4l4u4d2r4u2l4"πCASE "9": DRAW "r4d4u2l4u2"πCASE "0": DRAW "r4d4l4u4r4g4u4"πEND SELECTπDRAW "BR" + STR$(stepX%)πIF stepY% > 0 THENπDRAW "BD" + STR$(stepY%)πELSEπDRAW "BU" + STR$(ABS(stepY%))πEND IFπNEXT CπDRAW "A0"πEND SUBππSUB INTROπSCREEN 13πFOR i = 1 TO 15: PALETTE i, 0: NEXTπDEF SEG = &HA000π'BLOAD "LOGO320.PIC", 0π'PALIO "LOGO320"πSOUND 2000, .5: SOUND 3000, 1πWHILE INKEY$ = "": WENDπEND SUBππSUB MouseDriver (ax%, BX%, cx%, dx%)π  DEF SEG = VARSEG(Mouse$)π  Mouse% = SADD(Mouse$)π  CALL ABSOLUTE(ax%, BX%, cx%, dx%, Mouse%)πEND SUBππSUB MOUSEHIDEπ ax% = 2π MouseDriver ax%, 0, 0, 0πEND SUBππFUNCTION MouseInit%π  ax% = 0π  MouseDriver ax%, 0, 0, 0π  MouseInit% = ax%πEND FUNCTIONππSUB MousePut (X%, Y%)π  ax% = 4π  cx% = X%π  dx% = Y%π  MouseDriver ax%, 0, cx%, dx%πEND SUBππSUB MouseRange (X1%, Y1%, X2%, Y2%)π  ax% = 7π  cx% = X1%π  dx% = X2%π  MouseDriver ax%, 0, cx%, dx%π  ax% = 8π  cx% = Y1%π  dx% = Y2%π  MouseDriver ax%, 0, cx%, dx%πEND SUBππSUB MOUSESHOWπ  ax% = 1π  MouseDriver ax%, 0, 0, 0πEND SUBππSUB MOUSESTATUS (LB%, RB%, XMOUSE%, YMOUSE%)π  ax% = 3π  MouseDriver ax%, BX%, cx%, dx%π  LB% = ((BX% AND 1) <> 0)π  RB% = ((BX% AND 2) <> 0)π  XMOUSE% = cx%π  YMOUSE% = dx%π  IF SCREENMODE% = 7 OR SCREENMODE% = 13 THEN XMOUSE% = XMOUSE% / 2πEND SUBππSUB PAINTITπMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπMOUSEHIDEπPAINT (X%, Y%), CO%πMOUSESHOWπEND SUBππSUB PALETTECHANGEπREDIM COVERUP6%(8000)πGET (30, 30)-(170, 135), COVERUP6%πBUTTON 30, 30, 170, 135, UPπBUTTON 32, 32, 46, 46, DOWN: LINE (33, 33)-(45, 45), 0: LINE (33, 45)-(45, 33), 0πBUTTON 48, 32, 168, 46, UPπBUTTON 120, 87, 160, 98, UPπBUTTON 33, 122, 63, 132, UPπBUTTON 70, 122, 100, 132, UPπFONT "SAVE  LOAD", 35, 124, 6, 0, 0, 0πFONT "OK", 130, 91, 6, 0, 0, 0πLINE (49, 33)-(167, 45), 9, BFπFONT "PALETTE", 51, 35, 6, 0, 15, 0πFONT "RED", 32, 60, 6, 0, 12, 0πFONT "GREEN", 32, 75, 6, 0, 10, 0πFONT "BLUE", 32, 90, 6, 0, 9, 0πFOR i% = 55 TO 85 STEP 15πBUTTON 70, i%, 80, i% + 13, UPπBUTTON 83, i%, 103, i% + 13, UPπBUTTON 105, i%, 115, i% + 13, UPπNEXTπFONT "PALETTE WILL CHANGE THE", 32, 100, 6, 0, 0, 0πFONT "VALUE OF THE", 32, 106, 6, 0, 0, 0πCOL = CO%πFONT "CURRENT", 109, 106, 6, 0, COL, 0πFONT "COLOR", 32, 112, 6, 0, 0, 0ππMOUSESHOWππWAIT4PRESS4:πMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πLINE (120, 60)-(160, 85), CO%, BFπFONT STR$(R%), 82, 60, 6, 0, 0, 0πFONT STR$(G%), 82, 75, 6, 0, 0, 0πFONT STR$(B%), 82, 90, 6, 0, 0, 0πWENDπMOUSEHIDEπIF X% > 33 AND Y% > 122 AND X% < 63 AND Y% < 132 THENπOPEN "DRAW!PAL.TMP" FOR APPEND AS #1πIF CHANGED% <> 0 THEN WRITE #1, CO%, R%, G%, B%πCLOSE #1πSAVEIT 3πEND IFπIF X% > 70 AND Y% > 122 AND X% < 100 AND Y% < 132 THEN SAVEIT 4πIF X% > 120 AND Y% > 87 AND X% < 160 AND Y% < 98 THENπPUT (30, 30), COVERUP6%, PSETπOPEN "DRAW!PAL.TMP" FOR APPEND AS #1πIF R% <> 0 AND G% <> 0 AND B% <> 0 THEN WRITE #1, CO%, R%, G%, B%πCLOSE #1πEXIT SUBπEND IFπIF X% > 32 AND Y% > 32 AND X% < 46 AND Y% < 46 THEN PUT (30, 30), COVERUP6%, PSET: EXIT SUBπIF X% > 70 AND Y% > 55 AND X% < 80 AND Y% < 70 THENπLINE (84, 56)-(102, 67), 7, BFπR% = R% - 1πIF R% = -1 THEN R% = 63πGOSUB CPALπEND IFπIF X% > 105 AND Y% > 55 AND X% < 115 AND Y% < 70 THENπLINE (84, 56)-(102, 67), 7, BFπR% = R% + 1πIF R% = 64 THEN R% = 0πGOSUB CPALπEND IFπIF X% > 70 AND Y% > 70 AND X% < 80 AND Y% < 85 THENπLINE (84, 71)-(102, 82), 7, BFπG% = G% - 1πIF G% = -1 THEN G% = 63πGOSUB CPALπEND IFπIF X% > 105 AND Y% > 70 AND X% < 115 AND Y% < 85 THENπLINE (84, 71)-(102, 82), 7, BFπG% = G% + 1πIF G% = 64 THEN G% = 0πGOSUB CPALπEND IFπIF X% > 70 AND Y% > 85 AND X% < 80 AND Y% < 100 THENπLINE (84, 86)-(102, 97), 7, BFπB% = B% - 1πIF B% = -1 THEN B% = 63πGOSUB CPALπEND IFπIF X% > 105 AND Y% > 85 AND X% < 115 AND Y% < 100 THENπLINE (84, 86)-(102, 97), 7, BFπB% = B% + 1πIF B% = 64 THEN B% = 0πGOSUB CPALπEND IFππGOTO WAIT4PRESS4πCPAL:πCHANGED% = 1π'Special thanks to David Gilham(SP?) for these EGA extended palette routines!πOUT &H3C8, CO% 'Selects color to change  \πOUT &H3C9, R% 'Selects red value         \πOUT &H3C9, G% 'Selects green value       /πOUT &H3C9, B% 'Selects blue value       /πRETURNπEND SUBππSUB PALIO (F$)πF$ = F$ + ".pal"πPALETTEπOPEN F$ FOR APPEND AS #1: CLOSE #1πOPEN F$ FOR INPUT AS #1πWHILE NOT (EOF(1))πINPUT #1, C%, R%, G%, B%πGOSUB CCPALπWENDπCLOSE #1πEXIT SUBππCCPAL:πOUT &H3C8, C% 'Selects color to change  \πOUT &H3C9, R% 'Selects red value         \πOUT &H3C9, G% 'Selects green value       /πOUT &H3C9, B% 'Selects blue value       /πRETURNπππEND SUBππ'This sub used for demo, not needed for mouse callsπSUB Pauseπ  PRINT "Press any key to continue..."π  G$ = INPUT$(1)π  PRINTπEND SUBππSUB PLOT (XX%, YY%, X%, Y%)πMOUSEHIDEπPAINT (XX%, YY%), CO%, 0πPSET (188 + X%, 6 + Y%), CO%πMOUSESHOWπEND SUBππSUB PLOTX (PX%, PY%)πMOUSEHIDEπN = 4πGET (PX% - N, PY% - N)-(PX% + N, PY% + N), PLX%πLINE (PX% - N, PY% - N)-(PX% + N, PY% + N), 0πLINE (PX% + N, PY% - N)-(PX% - N, PY% + N), 0πMOUSESHOWπEND SUBππSUB POPOPS (FUNC%)πTHEWHOLETHING:πIF SCREENMODE% = 13 THEN REDIM COVERUP1%(31000)πIF SCREENMODE% <> 13 THEN REDIM COVERUP1%(13000)πMOUSEHIDEπGET (1, 1)-(319, 150), COVERUP1%πBUTTON 1, 1, 319, 150, UPπBUTTON 2, 2, 318, 149, UPπBUTTON 5, 5, 18, 18, DOWN: LINE (6, 6)-(17, 17), 0: LINE (6, 17)-(17, 6), 0πBUTTON 21, 5, 316, 18, UP: LINE (22, 6)-(315, 17), 9, BFπBUTTON 130, 132, 175, 142, UPπBUTTON 190, 132, 210, 142, UPπBUTTON 178, 132, 188, 142, UPπBUTTON 212, 132, 222, 142, UPπBUTTON 225, 132, 300, 142, UPπFONT "Tools", 24, 9, 7, 0, 15, 0πREDRAW:πFONT "PALETTE", 132, 135, 6, 0, 0, 0πFONT "Screen mode", 227, 135, 6, 0, 0, 0πa% = 0πMOUSEHIDEπFOR i% = 5 TO 250 STEP 40πa% = a% + 1πBUTTON i%, 20, i% + 38, 50, UPπIF a% = FUNC% THEN BUTTON i%, 20, i% + 38, 50, DOWNπNEXTπFOR i% = 5 TO 175 STEP 40πa% = a% + 1πBUTTON i%, 53, i% + 38, 83, UPπIF a% = FUNC% THEN BUTTON i%, 53, i% + 38, 83, DOWNπNEXTπIF SCREENMODE% <> 13 THENπFOR i = 5 TO 235 STEP 15πC = C + 1πLINE (i, 85)-(i + 14, 100), C - 1, BFπCS% = 0πIF C - 1 = CO% THEN CS% = 14πLINE (i, 85)-(i + 14, 100), CS%, BπNEXTπC = 0πEND IFπIF SCREENMODE% = 13 THENπFOR a = 0 TO 4πFOR i = 5 TO 295 STEP 5πC = C + 1πIF C > 255 THEN GOTO NXTπLINE (i, 85 + 11 * a)-(i + 5, 96 + 11 * a), C - 1, BFπCS% = 0πIF C - 1 = CO% THEN CS% = 14πLINE (i, 85 + 11 * a)-(i + 5, 96 + 11 * a), CS%, BπNXT:πNEXTπNEXTπEND IFπLINE (7, 21)-(42, 49), 9πLINE (48, 22)-(80, 48), 4, BπLINE (88, 22)-(120, 48), 14, BFπCOLOR 10: CIRCLE (144, 35), 16πCOLOR 11: CIRCLE (184, 35), 16: PAINT (184, 35), 11πLINE (215, 30)-(225, 48), 0, B: LINE (221, 33)-(225, 45), 0, B: PAINT (222, 34), 4, 0πLINE (215, 30)-(217, 28), 0: LINE (217, 28)-(223, 28), 0: LINE (223, 28)-(225, 30), 0πLINE (220, 27)-(221, 26), 15, BFπFONT "PAINT", 248, 27, 6, 0, 12, 0πFONT "DOODLE", 7, 60, 6, 0, 10, 0πFONT "ZOOM", 53, 60, 6, 0, 9, 0πFONT "ABC", 90, 60, 6, 0, 1, 0πFONT "SAVE", 130, 60, 6, 0, 0, 0πFONT "LOAD", 170, 60, 6, 0, 0, 0πBUTTON 210, 60, 250, 70, UPπBUTTON 255, 60, 290, 70, UPπBUTTON 210, 72, 290, 82, UPπFONT "EXIT", 215, 62, 6, 0, 0, 0πFONT "UNDO", 260, 62, 6, 0, 0, 0πFONT "PRINTER SETUP", 212, 74, 6, 0, 0, 0ππLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDππWAIT4PRESS:πFONT STR$(THICK%), 188, 136, 6, 0, 0, 0πMOUSESHOWπMOUSESTATUS LB%, RB%, X%, Y%πIF LB% = -1 THENπMOUSEHIDEπIF X% > 210 AND Y% > 72 AND X% < 290 AND Y% < 82 THEN PRINTSETUPπIF X% > 210 AND Y% > 60 AND X% < 250 AND Y% < 70 THEN SYSTEMπIF X% > 130 AND Y% > 132 AND X% < 175 AND Y% < 142 THEN PALETTECHANGEπIF X% > 225 AND Y% > 132 AND X% < 300 AND Y% < 142 THENπOSC% = SCREENMODE%πCHANGESCREENMODEπIF OSC% <> SCREENMODE% THEN FUNC% = 99: EXIT SUBπEND IFπIF X% > 178 AND Y% > 132 AND X% < 188 AND Y% < 142 AND LB% = -1 THENπTHICK% = THICK% - 1πIF THICK% = 0 THEN THICK% = 1πBUTTON 190, 132, 210, 142, UPπGOSUB DELAYπGOTO WAIT4PRESSπEND IFπIF X% > 212 AND Y% > 132 AND X% < 222 AND Y% < 142 AND LB% = -1 THENπTHICK% = THICK% + 1πIF THICK% = 25 THEN THICK% = 24πBUTTON 190, 132, 210, 142, UPπGOSUB DELAYπGOTO WAIT4PRESSπEND IFππIF SCREENMODE% <> 13 THENπFOR i = 5 TO 235 STEP 15πC = C + 1πIF SCREENMODE% <> 13 AND X% > i AND Y% > 85 AND X% < i + 14 AND Y% < 100 THEN CO% = C - 1πNEXTπC = 0πEND IFπC = 0πIF SCREENMODE% = 13 THENπFOR a = 0 TO 4πFOR i = 5 TO 295 STEP 5πC = C + 1πIF X% > i AND Y% > 85 + 11 * a AND X% < i + 5 AND Y% < 96 + 11 * a THEN CO% = C - 1πNEXTπNEXTπC = 0πEND IFππa% = 0πIF X% > 5 AND Y% > 5 AND X% < 18 AND Y% < 18 THEN GOTO ABORTIT2πFOR i% = 5 TO 250 STEP 40πa% = a% + 1πIF X% > i% AND Y% > 20 AND X% < i% + 38 AND Y% < 50 THEN LF% = FUNC%: FUNC% = a%πIF a% = FUNC% THEN BUTTON i%, 20, i% + 38, 50, DOWNπNEXTπFOR i% = 5 TO 170 STEP 40πa% = a% + 1πIF X% > i% AND Y% > 53 AND X% < i% + 38 AND Y% < 83 THEN LF% = FUNC%: FUNC% = a%πIF a% = FUNC% THEN BUTTON i%, 53, i% + 38, 83, DOWNπNEXTπIF FUNC% = 11 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 1: FUNC% = LF%: GOTO THEWHOLETHINGπIF FUNC% = 12 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 2: FUNC% = LF%: GOTO THEWHOLETHINGπIF X% > 255 AND Y% > 60 AND X% < 290 AND Y% < 70 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 6: FUNC% = LF%: MOUSESHOW: GOTO THEWHOLETHINGππMOUSESHOWπGOTO REDRAWπEND IFπGOTO WAIT4PRESSπABORTIT2:πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπMOUSEHIDEπPUT (1, 1), COVERUP1%, PSETπSAVEIT 5πMOUSESHOWπERASE COVERUP1%πEXIT SUBπDELAY:πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπRETURNπEND SUBππSUB PRINTITπRESTORE printcodeπMOUSEHIDEπ    REDIM a%(2)π    DEF SEG = VARSEG(a%(0))π    FOR i% = 0 TO 2π       READ d%π       POKE VARPTR(a%(0)) + i%, d%π    NEXT i%π    CALL ABSOLUTE(VARPTR(a%(0)))π    DEF SEGπMOUSESHOWπEND SUBππSUB PRINTSETUPπOPEN "DRAWPRNT.STP" FOR APPEND AS #1: CLOSE #1πOPEN "DRAWPRNT.STP" FOR INPUT AS #1πWHILE NOT (EOF(1))πINPUT #1, PRN%πWENDπCLOSE #1πIF PRN% = 0 THEN PRN% = 1πREDIM PR$(18), DRV$(18)πPR$(1) = "IBM B/W Printer": DRV$(1) = "COLOR1"πPR$(2) = "IBM RGB Printer": DRV$(2) = "COLOR4"πPR$(3) = "IBM CMY Printer": DRV$(3) = "COLOR8"πPR$(4) = "HP PCL Default": DRV$(4) = "HPDEFAULT"πPR$(5) = "HP Deskjet": DRV$(5) = "DESKJET"πPR$(6) = "IBM PROprinter": DRV$(6) = "GRAPHICS"πPR$(7) = "IBM Quietwriter": DRV$(7) = "GRAPHICS"πPR$(8) = "IBM Graphics WIDE": DRV$(8) = "GRAPHICSWIDE"πPR$(9) = "HP Laserjet": DRV$(9) = "LASERJET"πPR$(10) = "HP Laserjet II": DRV$(10) = "LASERJETII"πPR$(11) = "HP Paintjet": DRV$(11) = "PAINTJET"πPR$(12) = "HP Quitjet": DRV$(12) = "QUIETJET"πPR$(13) = "HP Quitjet plus": DRV$(13) = "QUIETJETPLUS"πPR$(14) = "HP Ruggedwriter": DRV$(14) = "RUGGEDWRITER"πPR$(15) = "HP Ruggedwriterwide": DRV$(15) = "RUGGEDWRITERWIDE"πPR$(16) = "IBM Thermal printer": DRV$(16) = "THERMAL"πPR$(17) = "HP Thinkjet": DRV$(17) = "THINKJET"πREDIM COVERUP8%(10000)πGET (18, 18)-(200, 90), COVERUP8%πBUTTON 18, 18, 200, 90, UPπFONT "TO PRINT MOVE MOUSE OFF SCREEN", 20, 75, 6, 0, 0, 0πFONT "AND PRESS SHIFT PRNT SCRN", 20, 82, 6, 0, 0, 0πBUTTON 20, 20, 34, 34, DOWN: LINE (21, 21)-(33, 33), 0: LINE (21, 33)-(33, 21), 0πBUTTON 36, 20, 198, 34, UP: LINE (37, 21)-(197, 33), 9, BFπFONT "PRINTER SETUP", 38, 22, 6, 0, 15, 0πBUTTON 30, 40, 40, 55, UPπBUTTON 45, 40, 160, 55, UPπBUTTON 165, 40, 175, 55, UPπBUTTON 70, 58, 110, 68, UPπFONT "OK", 85, 60, 6, 0, 0, 0πWAIT4PRESS6:πMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πFONT PR$(PRN%), 47, 42, 6, 0, 0, 0πWENDπIF X% > 70 AND Y% > 58 AND X% < 110 AND Y% < 68 THENπPUT (18, 18), COVERUP8%, PSETπOPEN "DRAWPRNT.STP" FOR OUTPUT AS #1πWRITE #1, PRN%πSHELL "GRAPHICS " + DRV$(PRN%) + " /R"πCLOSE #1ππEXIT SUBπEND IFπIF X% > 20 AND Y% > 20 AND X% < 34 AND Y% < 34 THEN PUT (18, 18), COVERUP8%, PSET: EXIT SUBπIF X% > 30 AND Y% > 40 AND X% < 40 AND Y% < 55 THENπPRN% = PRN% - 1πIF PRN% = 0 THEN PRN% = 1πBUTTON 45, 40, 160, 55, UPπEND IFπIF X% > 165 AND Y% > 40 AND X% < 175 AND Y% < 55 THENπPRN% = PRN% + 1πIF PRN% = 18 THEN PRN% = 17πBUTTON 45, 40, 160, 55, UPπEND IFπππGOTO WAIT4PRESS6πEND SUBππSUB SAVEIT (OP%)πIF OP% = 5 THEN F2$ = "DRAWUNDO": OP% = 1: GOTO UNDOSAVEπIF OP% = 6 THEN F2$ = "DRAWUNDO": OP% = 2: GOTO UNDOSAVEπREDIM COVERUP2%(10000)πMOUSEHIDEπGET (1, 1)-(202, 55), COVERUP2%πBUTTON 1, 1, 202, 55, UPπIF SCREENMODE% = 7 OR SCREENMODE% = 9 OR SCREENMODE% = 8 THEN COLOR 15, 7πLOCATE 2, 2: PRINT "Filename(NO EXTENSION!):"πCOLOR 9πREIN:πLOCATE 3, 2: PRINT "              "πLOCATE 3, 2: INPUT "", FILENAME$πF2$ = FILENAME$πIF LEN(FILENAME$) > 8 THEN GOTO REINπPUT (1, 1), COVERUP2%, PSETπUNDOSAVE:πMOUSESHOWπIF SCREENMODE% = 7 OR SCREENMODE% = 9 OR SCREENMODE% = 8 THEN COLOR 15, 0πIF OP% = 3 THENπOPEN "DRAW!PAL.TMP" FOR INPUT AS #2πOPEN F2$ + ".PAL" FOR APPEND AS #3πWHILE NOT (EOF(2))πINPUT #2, RC%, RR%, RG%, RB%πWRITE #3, RC%, RR%, RG%, RB%πWENDπCLOSE #2: CLOSE #3πMOUSESHOWπEND IFπIF OP% = 4 THENπCLOSEπOPEN F2$ + ".PAL" FOR INPUT AS #1πWHILE NOT (EOF(1))πINPUT #1, CO%, R%, G%, B%π'Special thanks to David Gilham(SP?) for these EGA extended palette routines!πOUT &H3C8, CO% 'Selects color to change  \πOUT &H3C9, R% 'Selects red value         \πOUT &H3C9, G% 'Selects green value       /πOUT &H3C9, B% 'Selects blue value       /πWENDπCLOSEπMOUSESHOWπEND IFπIF OP% = 1 AND SCREENMODE% = 13 THENπDEF SEG = &HA000πBSAVE F2$ + ".PIC", 0, 64000πEND IFπIF OP% = 1 AND SCREENMODE% > 6 AND SCREENMODE% < 13 THEN SCREENIO F2$, 1: EXIT SUBπIF OP% = 2 AND SCREENMODE% = 13 THENπDEF SEG = &HA000πBLOAD F2$ + ".PIC", 0πEND IFπIF OP% = 2 AND SCREENMODE% > 6 AND SCREENMODE% < 13 THEN SCREENIO F2$, 0: EXIT SUBπEND SUBππSUB SAVEPRINTER (PRNTRTYPE%)πEND SUBππSUB SCREENIO (F$, flag)π  DEF SEG = &H40π  VidMode = PEEK(&H49)π  PageAddr& = PEEK(&H4E) + PEEK(&H4F) * 256&π  PageSize& = PEEK(&H4C) + PEEK(&H4D) * 256&π  IF VidMode = 19 THEN PageSize& = 64000π  DEF SEGπ  SELECT CASE VidModeπ    CASE 3, 4, 6   'SCREEN 0,1,2           π      DEF SEG = &HB800: GOSUB ScreenIO1: DEF SEGπ    CASE 13 TO 19  'SCREEN 7 to 13         π      DEF SEG = &HA000π      IF VidMode = 19 THENπ        GOSUB ScreenIO1π      ELSEπ        FOR p = 0 TO 3π          IF flag THENπ            OUT &H3CE, 4: OUT &H3CF, pπBSAVE F$ + ".PL" + LTRIM$(STR$(p)), PageAddr&, PageSize&π          ELSEπ            OUT &H3C4, 2: OUT &H3C5, 2 ^ pπ          BLOAD F$ + ".PL" + LTRIM$(STR$(p)), PageAddr&π          END IFπ          IF p = 1 AND VidMode = 15 THEN EXIT FORπ        NEXTπ      END IFπ      DEF SEGπ  END SELECTπ  EXIT SUBπScreenIO1:                                 π  IF flag THEN BSAVE F$ + ".SCR", PageAddr&, PageSize&'Goes on above line'-> ELSE BLOAD f$ + ".SCR", PageAddr&π  RETURNππEND SUBππSUB TEXTFONTπREDIM COVERUP7%(10000)πGET (1, 1)-(318, 60), COVERUP7%πMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπMOUSEHIDEπBUTTON 1, 1, 318, 60, UPπBUTTON 3, 3, 17, 17, DOWN: LINE (4, 4)-(16, 16), 0: LINE (4, 16)-(16, 4), 0πBUTTON 19, 3, 316, 17, UP: LINE (20, 4)-(315, 16), 9, BFπBUTTON 135, 45, 145, 55, UPπBUTTON 148, 45, 163, 55, UPπBUTTON 166, 45, 176, 55, UPπBUTTON 180, 45, 220, 55, UPπFONT STR$(FONTSIZE%), 145, 48, 6, 0, 0, 0πFONT "OK", 195, 48, 6, 0, 0, 0πFONT "Enter text", 22, 6, 6, 0, 15, 0πIF SCREENMODE% < 10 THEN COLOR CO%, 0πIF SCREENMODE% > 10 THEN COLOR CO%πLOCATE 4, 2: PRINT STRING$(38, " ")πLOCATE 5, 2: PRINT STRING$(38, " ")πMOUSESHOWπLOCATE 4, 2: LINE INPUT "", DUMMY$πLOCATE 5, 2: LINE INPUT "", DUMMY$πFONT "PRESS 'OK' WHEN READY", 5, 50, 6, 0, 12, 0πMOUSEHIDEπREDIM LINE1%(304, 8)πREDIM LINE2%(304, 8)ππFOR XX% = 8 TO 311πa% = a% + 1πFOR YY% = 24 TO 31πB% = B% + 1πLINE1%(a%, B%) = POINT(XX%, YY%)πNEXTπB% = 0πNEXTπa% = 0: B% = 0πFOR XX% = 8 TO 311πa% = a% + 1πFOR YY% = 32 TO 39πB% = B% + 1πLINE2%(a%, B%) = POINT(XX%, YY%)πNEXTπB% = 0πNEXTππOX% = X%: OY% = Y%πππWAIT4PRESS5:πMOUSESHOWπLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πFONT STR$(FONTSIZE%), 145, 48, 6, 0, 0, 0πWENDπMOUSEHIDEπIF X% > 3 AND Y% > 3 AND X% < 17 AND Y% < 17 THEN PUT (1, 1), COVERUP7%, PSET: EXIT SUBπIF X% > 180 AND Y% > 45 AND X% < 220 AND Y% < 55 THEN GOTO PRINTFONTπIF X% > 135 AND Y% > 45 AND X% < 145 AND Y% < 55 THENπFONTSIZE% = FONTSIZE% - 2πIF FONTSIZE% < 0 THEN FONTSIZE% = 1πBUTTON 148, 45, 163, 55, UPπGOTO WAIT4PRESS5πEND IFππIF X% > 166 AND Y% > 45 AND X% < 176 AND Y% < 55 THENπFONTSIZE% = FONTSIZE% + 2πIF FONTSIZE% > 23 THEN FONTSIZE% = 23πBUTTON 148, 45, 163, 55, UPπGOTO WAIT4PRESS5πEND IFππGOTO WAIT4PRESS5πππPRINTFONT:πS% = FONTSIZE% - 1πa% = 0: B% = 0πMOUSEHIDEπPUT (1, 1), COVERUP7%, PSETπFOR X = 8 TO 311πa% = a% + 1πFOR Y = 24 TO 31πB% = B% + 1πIF LINE1%(a%, B%) = 0 THEN GOTO NXT2πi = S%πIF i > 1 THEN LINE (OX% + a% * i, OY% + B% * i)-(OX% + a% * i + S%, OY% + B% * i + S%), LINE1%(a%, B%), BFπIF i < 3 THEN PSET (OX% + a%, OY% + B%), LINE1%(a%, B%)πIF i > 1 THEN LX% = a% * iπIF i < 3 THEN LX% = a%πNXT2:πNEXTπB% = 0πNEXTπa% = 0: B% = 0πOX% = OX% + LX%πFOR X = 8 TO 311πa% = a% + 1πFOR Y = 24 TO 31πB% = B% + 1πIF LINE2%(a%, B%) = 0 THEN GOTO NXT3πi = S%πLX% = LX% + 1πIF i > 1 THEN LINE (OX% + a% * i, OY% + B% * i)-(OX% + a% * i + S%, OY% + B% * i + S%), LINE2%(a%, B%), BFπIF i < 3 THEN PSET (OX% + a%, OY% + B%), LINE2%(a%, B%)πNXT3:πNEXTπB% = 0πNEXTππMOUSESHOWππEND SUBππSUB WARN (RETURN.CODE%)πREDIM WARNING%(6000)πGET (20, 20)-(140, 80), WARNING%πMOUSEHIDEπBUTTON 20, 20, 140, 80, UPπBUTTON 22, 22, 35, 35, DOWN: LINE (23, 23)-(34, 34), 0: LINE (23, 34)-(34, 23), 0πBUTTON 37, 22, 138, 35, UP: LINE (38, 23)-(137, 34), 9, BFπFONT "WARNING", 39, 25, 6, 0, 15, 0πFONT "Changing screen", 25, 38, 6, 0, 0, 0πFONT "modes means lose", 25, 45, 6, 0, 0, 0πFONT "PICTURE", 25, 51, 6, 0, 0, 0πBUTTON 27, 67, 70, 77, UPπBUTTON 73, 67, 113, 77, UPπFONT "PROCEED", 29, 70, 6, 0, 0, 0πFONT "CANCEL", 75, 70, 6, 0, 0, 0πMOUSESHOWπWAIT4PRESS3:πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπIF X% > 27 AND Y% > 67 AND X% < 70 AND Y% < 77 THEN RETURN.CODE% = 0: EXIT SUBπIF X% > 73 AND Y% > 67 AND X% < 113 AND Y% < 77 THEN RETURN.CODE% = 1: EXIT SUBπIF X% > 22 AND Y% > 22 AND Y% < 35 AND Y% < 35 THEN RETURN.CODE% = 0: EXIT SUBπGOTO WAIT4PRESS3πEND SUBππSUB ZOBJ (SEL%)πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN EXIT SUBπIF RB% = -1 THEN EXIT SUBπWENDππFOR XX% = 5 TO 180 STEP 5πa% = a% + 1πFOR YY% = 20 TO 145 STEP 5πB% = B% + 1πIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%: GOTO FOUNDITπNEXTπB% = 0πNEXTπFOUNDIT:πOX% = a%: OY% = B%πa% = 0: B% = 0: X% = 0: Y% = 0: XX% = 0: YY% = 0πLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDππFOR XX% = 5 TO 180 STEP 5πa% = a% + 1πFOR YY% = 20 TO 145 STEP 5πB% = B% + 1πIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%: GOTO FOUNDIT2πNEXTπB% = 0πNEXTπFOUNDIT2:ππIF SEL% = 1 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%πIF SEL% = 2 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%, BπIF SEL% = 3 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%, BFππX% = 188: Y% = 6πMOUSEHIDEπREDIM ZOOMM(35, 25)πFOR CAPX = 1 TO 35πFOR CAPY = 1 TO 25πZOOMM(CAPX, CAPY) = POINT(X% + CAPX, Y% + CAPY)πNEXTπNEXTππFOR X = 5 TO 175 STEP 5πXX = XX + 1πFOR Y = 20 TO 140 STEP 5πYY = YY + 1πPAINT (X + 1, Y + 1), ZOOMM(XX, YY), 0πPSET (188 + XX, 6 + YY), ZOOMM(XX, YY)πNEXTπYY = 0πNEXTπMOUSESHOWππEND SUBππSUB ZOOMπIF ZOOMHELP = 1 THENπREDIM HELP%(15000)πMOUSEHIDEπGET (1, 1)-(200, 100), HELP%πBUTTON 1, 1, 200, 100, UPπBUTTON 2, 2, 199, 99, UPπBUTTON 4, 4, 18, 18, DOWN: LINE (5, 5)-(17, 17), 0: LINE (5, 17)-(17, 5), 0πBUTTON 20, 4, 197, 18, UP: LINE (21, 5)-(196, 17), 9, BFπFONT "ZOOM Instructions", 22, 9, 6, 0, 15, 0πFONT "To disable these instructions", 6, 20, 6, 0, 4, 0πFONT "set the CONSTant ZOOMHELP to 0", 6, 26, 6, 0, 4, 0πFONT "Using ZOOM is easy. To ZOOM into", 6, 35, 6, 0, 10, 0πFONT "a specific region use the mouse", 6, 41, 6, 0, 10, 0πFONT "to select the upper-right corner", 6, 47, 6, 0, 10, 0πFONT "of that area. DRAW! will capture", 6, 53, 6, 0, 10, 0πFONT "34x25 pixels from that point", 6, 59, 6, 0, 10, 0πDO WHILE INKEY$ = ""πMOUSESHOWπMOUSESTATUS LB%, RB%, X%, Y%πIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN EXIT DOπLOOPπMOUSEHIDEπPUT (1, 1), HELP%, PSETπERASE HELP%πMOUSESHOWπEND IFππLB% = -1πWHILE LB% = -1πMOUSESTATUS LB%, RB%, X%, Y%πWENDπLB% = 0πWHILE LB% = 0πMOUSESTATUS LB%, RB%, X%, Y%πIF RB% = -1 THEN EXIT SUBπWENDπXXX% = X%: YYY% = Y%πMOUSEHIDEπREDIM COVERUP3%(14000)πREDIM COVERUP4%(5000)πGET (187, 5)-(225, 33), COVERUP4%πGET (2, 2)-(183, 151), COVERUP3%πREDIM ZOOMM(35, 25)πFOR CAPX = 1 TO 35πFOR CAPY = 1 TO 25πZOOMM(CAPX, CAPY) = POINT(X% + CAPX, Y% + CAPY)πNEXTπNEXTπBUTTON 2, 2, 183, 151, UPπBUTTON 187, 5, 225, 33, UPπBUTTON 4, 4, 18, 18, DOWN: LINE (5, 5)-(17, 17), 0: LINE (5, 17)-(17, 5), 0πBUTTON 20, 4, 181, 18, UP: LINE (21, 5)-(180, 17), 9, BFπFONT "ZOOM EDITOR", 23, 8, 6, 0, 15, 0πFOR X = 5 TO 180 STEP 5πLINE (X, 20)-(X, 145), 0πNEXTπFOR Y = 20 TO 145 STEP 5πLINE (5, Y)-(180, Y), 0πNEXTπFOR X = 5 TO 175 STEP 5πXX = XX + 1πFOR Y = 20 TO 140 STEP 5πYY = YY + 1πPAINT (X + 1, Y + 1), ZOOMM(XX, YY), 0πPSET (188 + XX, 6 + YY), ZOOMM(XX, YY)πNEXTπYY = 0πNEXTπMOUSESHOWπIN02:πMOUSESTATUS LB%, RB%, X%, Y%πa% = 0: B% = 0πIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN GOTO ABORTIT3πIF RB% = -1 THENπPOPOPS ZFUNC%πMOUSESHOWπEND IFπIF ZFUNC% > 0 AND ZFUNC% < 6 THEN ZOBJ ZFUNC%πIF LB% = -1 AND ZFUNC% = 0 THENπFOR XX% = 5 TO 175 STEP 5πa% = a% + 1πFOR YY% = 20 TO 140 STEP 5πB% = B% + 1πIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%πNEXTπB% = 0πNEXTπEND IFπGOTO IN02πABORTIT3:πMOUSEHIDEπREDIM EDITED%(5000)πGET (189, 7)-(223, 31), EDITED%πPUT (187, 5), COVERUP4%, PSETπPUT (2, 2), COVERUP3%, PSETπPUT (XXX% + 1, YYY% + 1), EDITED%, PSETπERASE EDITED%πERASE COVERUP4%πERASE COVERUP3%πMOUSESHOWπEND SUBπJames Tonn                     TILE GRAPHICS                  www.geocities.com/SiliconVally/08/94 (00:00)          QB, QBasic, PDS        306  13876    TILEEX.BAS  'This is a small program using tile graphics. This source code is the propertyπ'of James Tonn. You may modify this source code and use it in your ownπ'programs. You may use it in a written publication provided that it is notπ'altered, and that you give credit to the author (James Tonn).π'I hope this code will help you in your programming.π'   -Jimmy Tonn 8/94π'   sltonn@phoenix.princeton.eduπ'   sltonn@eden.rutgers.eduπ'   jtonn@nerc1.nerc.comπ'   75022.401@compuserve.comππDEFINT A-Z  'declare all variables starting with a through z as integersπSCREEN 13   'set screen mode 13, 320x200x256πCLS         'clear screenππRESTORE world   'restore data pointer so all data reading starts after labelπ                ' "world"ππCONST ACROSS = 11 'this is the number of across tiles that will appear onπ                  'the screen at a time, the total number of across tilesπ                  'is stored in the variable tacrossπCONST DOWN = 11   'number of down tiles on screen... total down tiles areπ                  'stored in tdownππDIM blankimg(116) 'create an array for the blank tileπ                  'this tile will be totally black, all zero'sπDIM grassimg(116) 'create an array for the grass tile's image, 116 bytesπDIM treeimg(116)  'create an array for the tree tile's image, 116 bytesπDIM playerimg(116)'create as array for the player tile's image, 116 bytesππREAD tacross, tdown  'get these values from the big data block "world"π                     'at the end of this programππTYPE tiletype          'create a type called tiletypeπ    x AS INTEGER       'the tile's x pixel coordπ    y AS INTEGER       'the tile's y pixel coordπ    style AS INTEGER   'the tile's styleπEND TYPEππDIM tile(tacross, tdown) AS tiletype 'declare array "tile" as tiletypeππTYPE playertype  'create a type called playertypeπ    x AS INTEGER 'x tile where the player isπ    y AS INTEGER 'y tile where the player isπ    px AS INTEGER 'the players "permanant" x tile, the tile that he appearsπ                  'in out of the tiles on the screenπ    py AS INTEGER 'the players "permanant" y tileπEND TYPEππDIM player AS playertype 'declare the variable player as a playertypeππREAD player.x, player.y  'read player x and y coords from data block "world"πplayer.px = 6πplayer.py = 6ππDEF FNSetlocs    'function to set pixel locs of tiles that appear on screenπ   FOR a = 1 TO ACROSSπ      FOR d = 1 TO DOWNπ         tile(a, d).x = 15 * a  'set pixel x location of tileπ         tile(a, d).y = 15 * d  'set pixel y location of tileπ      NEXT d                    '(all tiles are 15x15 pixels)π   NEXT aπEND DEFππDEF FNSetAtts   'function to read the styles of all tiles from data blockπ   FOR d = 1 TO tdownπ      FOR a = 1 TO tacrossπ         READ tile(a, d).style 'read the tile's styleπ      NEXT aπ   NEXT dπEND DEFπππ'this next routine draws the tile on the screenπ'the tx and ty variables are the tile numbers out of all the tilesπ'the cx and cy variables are locations of the tile spaces where the tilesπ'will be displayed on the screenπDEF FNDrawTile (tx, ty, cx, cy)π    SELECT CASE tile(tx, ty).style  'check the tile's styleπ          CASE 0  'if it's 0, draw an array of zero's (a black tile)π              PUT (tile(cx, cy).x, tile(cx, cy).y), blankimg, PSETπ          CASE 1  'if it's 1, draw the grass tileπ              PUT (tile(cx, cy).x, tile(cx, cy).y), grassimg, PSETπ          CASE 2  'if it's 2, draw the tree tileπ              PUT (tile(cx, cy).x, tile(cx, cy).y), treeimg, PSETπ    END SELECTπEND DEFππ'this draws all the visible tiles on the screenπ'it will draw from 5 tiles to the left of the player to 5 tiles to his rightπ'and from 5 tiles up to 5 tiles downπDEF FNDrawScreenπ   FOR rela = -5 TO 5π      FOR reld = -5 TO 5π           dummy = FNDrawTile(player.x + rela, player.y + reld, player.px + rela, player.py + reld)π      NEXT reldπ   NEXT relaπEND DEFππ'this function draws the player on the screen in his "permanant" locationπDEF FNDrawPlayerπ   PUT (tile(player.px, player.py).x, tile(player.px, player.py).y), playerimg, PSETπEND DEFππDEF FNDisplayImg 'this function will read an images colors from a data blockπ                 'and display the image on the screen. Before calling thisπ                 'function, reset the data pointer to the beginning of theπ                 'data block for the image.π   FOR dp = 1 TO 15π      FOR ap = 1 TO 15π         READ att                     'read the value at the point in the data blockπ         PSET (ap + 10, dp + 10), att 'put the pixel on the screen with theπ                                      'color that was read from the dataπ                                      'blockπ      NEXT apπ   NEXT dpπEND DEFππ'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *π' * * * * * * * * * * * * End of Function Defs* * * * * * * * * * * * * *ππdummy = FNSetlocs   'set the locations for the on-screen tilesπdummy = FNSetAtts   'set the styles for all the tilesππGET (11, 11)-(25, 25), blankimg 'get an array that is all zero's, which willπ                                'the black tile that we put around the edgesπ                                'of the map. No data reading is needed sinceπ                                'the screen is already totally black. Allπ                                'we need to do is grab a block.ππRESTORE grassdata   'restore the data pointer to the beginning of the dataπ                    'block that stores the grass tile's image. If you'reπ                    'reseting the data pointer to load the images, do itπ                    'after calling FNSetLocs and FNSetAtts, because theyπ                    'need the data pointer in a certain placeπdummy = FNDisplayImg  'call routine to read and display the imageπGET (11, 11)-(25, 25), grassimg 'get the image into array "grassimg"πPUT (11, 11), grassimg, XOR     'put image over existing one to clear itππRESTORE treedata 'restore data pointer to beginning of the tree tile's imageπdummy = FNDisplayImg 'read and display the imageπGET (11, 11)-(25, 25), treeimg  'get the image into array "treeimg"πPUT (11, 11), treeimg, XOR  'put image on top of the old one to clear itππRESTORE playerdata 'restore pointer to beginning of player tile's imageπdummy = FNDisplayImg 'read and display the imageπGET (11, 11)-(25, 25), playerimg  'get the image into array "playerimg"πPUT (11, 11), playerimg, XOR  'put image on top of the old one to clear itππdummy = FNDrawScreen  'draw the screen onceπdummy = FNDrawPlayer  'draw the player onceπππDOπ  kbd$ = INKEY$            'get a "transparent" inputπ  IF kbd$ <> "" THEN       'if there actually was a user input, then...π    kbd$ = RIGHT$(kbd$, 1) 'get the first byte of the input (this is neededπ                           'if you want to look for input from the cursorπ                           'keys)π    SELECT CASE kbd$π          CASE CHR$(27)    'user pressed escape keyπ              END          'end the programπ          CASE CHR$(72) 'user pressed up arrowπ              IF tile(player.x, player.y - 1).style <> 2 THENπ              '^^^ check if the tile the player is about to move into isπ              'already occupied by a tree.π              'if you check for a tree, you really don't need to check ifπ              'the player is going to go past the line of trees at theπ              'edge with the other method, because if you check for a tree,π              'it will stop you before you go past the line anyway I justπ              'added them both in case the reader wanted to use a certainπ              'method for some reason.π               π                IF player.y - 1 > 5 THEN     'make sure he doesn't go pastπ                                             'the line of trees. You willπ                                             'probably have to change thisπ                                             'number around if you change theπ                                             'player's view screen sizeπ                  player.y = player.y - 1    'decrease player y tile by oneπ                END IFπ                dummy = FNDrawScreen       'draw the screenπ                dummy = FNDrawPlayer       'put the player on the screenπ              END IFπ          CASE CHR$(80) 'user pressed down arrowπ              IF tile(player.x, player.y + 1).style <> 2 THENπ              '^^^ check if the tile the player is about to move into isπ              'already occupied by a tree.π                IF player.y + 1 < (tdown - 5) THEN 'keep player on screenπ                  player.y = player.y + 1    'increase player y tile by oneπ                END IFπ                dummy = FNDrawScreen       'draw the screenπ                dummy = FNDrawPlayer       'put the player on the screenπ              END IFπ          CASE CHR$(75) 'user pressed left arrowπ              IF tile(player.x - 1, player.y).style <> 2 THENπ              '^^^ check if the tile the player is about to move into isπ              'already occupied by a tree.ππ                IF player.x - 1 > 5 THEN   'keep player on screenπ                  player.x = player.x - 1    'decrease player x tile by oneπ                END IFπ                dummy = FNDrawScreen       'draw the screenπ                dummy = FNDrawPlayer       'put the player on the screenπ              END IFπ          CASE CHR$(77) 'user pressed right arrowπ              IF tile(player.x + 1, player.y).style <> 2 THENπ              '^^^ check if the tile the player is about to move into isπ              'already occupied by a tree.ππ                IF player.x < (tacross - 6) THEN  'keep player on screenπ                  player.x = player.x + 1    'increase player x tile by oneπ                END IFπ                dummy = FNDrawScreen       'draw the screenπ                dummy = FNDrawPlayer       'put the player on the screenπ              END IFπ    END SELECTπ  END IFπLOOP        'restart the main loopπππworld:ππDATA 30,30πDATA 15,15πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,2,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,2,0,0,0,0,0πDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0πDATA 0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ππgrassdata:πDATA 0,0,0,0,2,0,0,0,148,0,0,2,0,0,0πDATA 0,2,0,0,0,0,0,0,0,0,0,0,0,0,141πDATA 0,0,0,0,142,0,0,2,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0πDATA 0,2,0,2,0,145,0,0,0,142,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,2,0,0,0,0,0,2πDATA 0,0,0,142,0,0,0,0,0,0,0,2,0,0,0πDATA 0,2,0,0,0,142,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,0,0,0,2,0,0,147,0,0πDATA 0,142,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,2,0,0,142,0,0,2,0,0,0,2,0πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 2,0,0,0,0,145,0,2,0,0,0,0,2,0,0πDATA 0,0,0,2,0,0,0,0,0,0,0,0,0,0,142πDATA 145,0,0,0,147,0,0,0,2,0,0,2,0,0,0ππtreedata:πDATA 0,0,0,2,2,2,2,2,2,2,2,0,0,0,0πDATA 0,0,2,2,2,2,2,2,2,2,2,2,0,0,0πDATA 0,6,2,2,2,2,2,2,2,2,2,6,0,0,0πDATA 0,2,6,2,2,2,2,2,2,2,6,2,0,0,0πDATA 0,2,2,6,2,2,2,2,2,6,2,2,0,0,0πDATA 0,0,2,2,6,2,2,2,6,2,2,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0πDATA 0,0,0,0,6,6,6,6,6,0,0,0,0,0,0πDATA 0,0,0,6,6,6,6,6,6,6,0,0,0,0,0ππplayerdata:πDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0πDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0πDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0πDATA 0,0,0,0,0,0,0,7,0,0,0,0,1,0,0πDATA 0,0,0,0,0,0,0,7,0,0,0,0,1,0,0πDATA 0,2,0,2,0,0,0,7,0,0,0,1,1,1,0πDATA 0,2,2,7,7,7,7,7,7,7,7,7,7,0,0πDATA 0,2,2,2,0,0,0,7,0,0,0,0,1,0,0πDATA 0,0,2,0,0,0,0,7,0,0,0,0,1,0,0πDATA 0,0,0,0,0,0,0,7,0,0,0,0,0,0,0πDATA 0,0,0,0,0,0,7,0,7,0,0,0,0,0,0πDATA 0,0,0,0,0,7,0,0,0,7,0,0,0,0,0πDATA 0,0,0,0,7,0,0,0,0,0,7,0,0,0,0πDATA 0,0,0,7,0,0,0,0,0,0,0,7,0,0,0ππMichael J. Kelly               SMALL FONT (8X8 SANS SERIF)    QBTIPS_?.DOC                   07-06-92 (08:03)       QB, PDS                52   3395     SMLFONT.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SMLFONT.ZIP",4^6:Z&=2268:?STRING$(50,177);πU"%up()%9%%%R-%KEAaEsZ%dmc)%%%%-%%%0%%%%xr%qkts%ySks[yrzF,9]k5%SAπU"uSZ;o*08U=;c[e8h%MRgPL;V+oI&?uS2QjB8WQK/>H%*deSDHUQWL1CA7K5\2gqπU"0gLqf+=n5gGW%7XO.O*BsNzD5DvDzSX71jpd=WX]W]\%tVN\Y:q[*NY]b17[)<rπU":P[_G3.YiyQ+:JUa''EduP(8L*SfY%=ZX88,.2l.D]v;g)V4,PthA9H3ZMs[HMFπU"DMDtMwL736L&cUceh=i(F,ePEPC?i1WZ<1(7Do92wN1XyLNI6vd;[Pr>H0mq6%qπU"<ckAfJ;5Ht2W.]BUwHEPpm&*KXQV/<()Ix4fn#10jB54#CjK'<l&OsB7=H-V^6fπU"FVT-[hoKA,t:(tTNSO\ZayAy:^tVzyKY0iMK8cN^uOT%up)OtCHPNs&2io+AKfRπU"ZZw=6t+>m_.7+InHv:ZCc&j]5?$t.DLmx;9tQl2SdzTJ6Ya((<DJ7>T4Q0qNtZvπU"1OPengi#\>/%q[%6lhX=0Z&>rI+D6LMT$##Xc5Za4-Y64B-e0BLtA=&%cXN0kQ+πU"Fbk2QAc&TQDWS3&kL^a%x9\Ub78NcRW&<)k6^[l?sg7G:76iTp^8:a3Zl(l#5W1πU"/^H=/??pj.-s5N/N\X:\*^qI[,a&=QP#iHEpe%u,_w6-8<;onym)r_5tR8i9]lvπU"^1c>j]IP]PL;Y$x3IhU1-$t[<pF,m\lSl>H[?=)-&I,/]oFRE(p;kinJJc#jxC4πU"eKf6Zv.xj:n9SK5:a'lQ&8jR1kSw$eqVMYTt=2%\$%.BSZdIVNqJi:66LIs/x\WπU".Q)aAb-;^iEnn[-:#O9s/p(]_Y$mw,0aO,j6=)T_2lq4S.ICV$<]J>*]29&dQ4LπU"tE.j,[Q/kW+Orj7u$oOUDDU\ceU9V-.RYNlLd.JTP)gm5h1<gG==pF.hk;2bnolπU"NECbFRPzko4><OAS96#vLy0MKc'ob1l/$]eXgqHNcixAGpyxM<9>a>z+IxI&jfiπU"w8Ih0SO]O.DtUroKgp*PFL2W?K]Npy4H+I7Bla'0P&kKQmOKZ-GLlolV(*KWG'oπU",c^\c%jjmufh\nr<n\.rw4v=b^s'3<m5ub'Y*4#_YQLw=p?u.W)iafG[#DN#V;bπU"xj)3sx+iqo2#xxqKn#=m-bm1LBS^XJNVuf+:8xls8_\I+stcOH=nnfq5<GK/[aIπU"8KrP0+f1;'YV8rj^a]o,dD-gc[IM-]h9<'D2.iaDY^:LvQ8\TI6x=$I&;fGYBkLπU"iYPTmI>+_dW'QER2VVV0EEFeRWZN2$HleZfkZgt%7v7Uzf?apx.yHDib=6k6S3^πU"\yr>?hSGyYG2WYhE&<s,maJnVlJ6w(/WEnC]j'6;'Am5F51P$2ft[3luLLI2Kc-πU"$rlxcG&>x&7<uM#zoJO=c<xu%p()9%%%%-I%rFaXE*[s-G?(%%%I.%%%/%%%%xrπU"q%ksyS[gfx&e%rB[7]56x<>NaG'R.y^s)k.EA04+3*;[V98EwBvQ/^oYQ8?a6l;πU"8..\[..WXqfOAs%Ucp6m3.p]^X%i.[1QQ,39*uoqvkY(*7?gTA02Te_J(8RooRzπU")SS.fJn:q/#yW&Au<S&,#MpJcVQT)0X*d0*dO+zK_^H%L(Qpa*&N00Ce;MZZn*DπU"7,a]W?iu$>f>]Ppq/7X?;TIS\?0#P^nQ171mWrAAB,Z-Vkm\%)/oFQ0^Jb;0%aAπU"zw4u:0B#HXX+?g'X50?)108[^d].W2O<Wj(VL;D6l=#CC$Y66^/'?o\;oK/o2KYπU"W2^0mo/%94S:DpD4(5UWn4bN\Uf9dKeo6L:';9>3b*]nQBEPRjeDAh:mfCdT8,oπU"lUX:$wc1aib0BA4N>;Q,+OWcwE/')mqW2mO<YL9H>A11gucL_7,wf[)Mrfb=4/XπU">=2=K#84Ku4pW8fSABMY+1aQKuc0SK;%C[4kto5iJek]fu((oD$=En.9cc2Cn(yπU"&'O[(i<2xvh'sNCNkC$PTFNPr:rdK$VZ*7yZ8+q;tC0+17m&BzEi,y)8bGq[%NtπU"29a1+PcX'eNPh1R-[-O;=kv'>nDW&6kOOf.HWpT(q(xU?Qi$26;iw+pVr>7I/Q7πU">bE,XsGSB2R-Jd-UKh\5m3:cZaDu*5(Q;]UvZHfOARjAaW^I]wRWpxaOr.+<U5(πU"VJ]SUL<Em0((a9>55JV+N><He2hE&(Lh(ksoI.em$mw*h_l4N$2X]lv9pMW2vVpπU"=CT<njkYC7E9PdkWt^K,4nL_;aF_G=FwIFYQ+OS')B*tkpz[4)r&t\nOR#zyF>HπU"BBWvsDx)/gPvbddNBu,L'6?-3NwUthOz-T>GA\IOeA(gDptm-[5O.bH-re8%EZlπU"1^:/pXx?a&uA/vX:pbzX7l^=#]A1iSKXhEcD8$'PD7\Va%GF?.6NTCig9JUgRwEπU",<%5-xFK7g346Y70'5&Ytupk_/;&Bq:$#wn)f[=r[l0l09R=Jr#+;5MchszX;2YπU"wXkPJiweefvS#)dvoopgB1UCVD,Jdbqw5U,Bfah(&mo=cK%Wb]PTOGqTFx4D,LRπU"1^]Q^&lCHdo>CUaNCkPP>3sd2d$V<tIR4URt2#(ws\#(GK:z<y/IHA;riW,[Ml2πU"RNG3I+\\F+ff*INRvbn's$jXB%:p=c27/[E0n2%;F\-sv=TqXNv?sVR6:TIyXWDπU"Qu'c&.a'W#XTC5c_g5u%2up&%'9%9%%%%-O%KEa.EsZd%mc)%%%%-%%%0%%%%%%πU"%%%%%E%%%%%%%%%x%rqkt%sySk%syup%&'9%%9%%%#-%rFnaE*[>sG?(%%%I.%%πU"%/%%%%%%%%%&%%E%%%&6)%%%xrqk%sySg%fxup%*+%%%%%'%.'%#%%%%z-%%%%%πEND SUBπCLOSE:IF S=59AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπEarl L. Montgomery             VESA MANDELBROT                FidoNet QUIK_BAS Echo          04-17-96 (22:32)       QB, PDS                135  4270     VESABROT.BAS' Here is a VESA high resolution Mandelbrot program. It allowsπ' you to choose the mode. You can let the computer pick the values orπ' you can enter them yourself. For testing I recommend you select <N>π' when prompted and enter the following yourself:ππ' acorner -.114π' bcorner -.917π' side .017ππ' On my 486/50 it takes about 12 minutes to complete. I think it looksπ' like multiple tornado funnels with multiple lightning strikes.ππ' BTW this is if you choose #1. 640x400x256ππ' When the screen is filled you will hear a beep and you can exit orπ' run it again by pressing the space bar twice. Or if you have the TSRπ' GRABBER that can be found on most BBSs you can save the screenπ' to an executable file by pressing CNTRL= then <ENTER>. When youπ' exit to dos you can view the saved screen by simply typingπ' SCREEN00 at the DOS prompt. The loading takes less than a sec!ππ' To run this program you must have a VESA compatiable graphicπ' card/chip <SVGA>. Or if your SVGA card/chip is not VESAπ' compatiable you can run it provided you have a VESA TSR loaded.ππ' P.S. If you let the computer pick the values or even if you enter theπ' values and nothing appealing is being put on the screen you canπ' press the space bar and you will be prompted to EXIT or RUNπ' again.ππ' Let me know if you have problems. Enjoy!ππ '$INCLUDE: 'qb.bi'π DIM inreg AS RegTypeπ DIM outreg AS RegTypeπ DEFDBL A-Zπ RANDOMIZE TIMERπ KEY(10) ONπ ON KEY(10) GOSUB endofprogramπ CLS : LOCATE 12, 30: COLOR 14: PRINT "WELCOME TO VESABROT"π LOCATE 14, 23: PRINT "Brought to you by Earl Montgomery"π SLEEP (2)πmakeselection:π CLSπ LOCATE 1, 1π PRINT "1. 640x400x256"π PRINT "2. 640x480x256"π PRINT "3. 800x600x256"π PRINT "4. 1024x768X16"π PRINT "5. 1024x768x256"π PRINT : INPUT "Select mode"; m%π IF m% < 1 OR m% > 5 THEN BEEP: GOTO makeselectionπ CLSπ INPUT "Let the computer select values <Y/N>"; q$π q$ = UCASE$(q$)π IF q$ = "Y" THEN CLS : GOTO randomselectπ INPUT "Acorner "; aπ acorner = aπ INPUT "Bcorner "; bπ bcorner = bπ INPUT "Side "; sπ side = sπ GOTO startπrandomselect:π acorner = (RND * 5 - 2)π IF acorner > 2 THEN GOTO randomselectπ IF acorner < -2 THEN GOTO randomselectπbcornerselect:π bcorner = (RND * 5 - 2)π IF bcorner > 2 THEN GOTO bcornerselectπ IF bcorner < -2 THEN GOTO bcornerselectπsideselect:π side = (RND * 5 - 2)π IF side > 2 THEN GOTO sideselectπ IF side < -2 THEN GOTO sideselectπstart:π maxdwell = 150π inreg.ax = &H4F02π IF m% = 1 THEN inreg.bx = &H100π IF m% = 2 THEN inreg.bx = &H101π IF m% = 3 THEN inreg.bx = &H103π IF m% = 4 THEN inreg.bx = &H104π IF m% = 5 THEN inreg.bx = &H105π CALL interrupt(&H10, inreg, outreg)π IF m% = 4 THEN numcolors = 16:  ELSE numcolors = 256π IF m% = 1 THEN numrows = 399π IF m% = 2 THEN numrows = 479π IF m% = 3 THEN numrows = 599π IF m% = 4 OR m% = 5 THEN numrows = 767π IF m% = 1 OR m% = 2 THEN numcols = 639π IF m% = 3 THEN numcols = 799π IF m% = 4 OR m% = 5 THEN numcols = 1023π yoffset = 1: xoffset = 1π highdwell = 0π gap = side / numrowsπ ac = acornerπ FOR x = xoffset TO numcols - 1 + xoffsetπ ac = ac + gap: bc = bcornerπ FOR y = yoffset TO numrows - 1 + xoffsetπ bc = bc + gapπ az = 0: bz = 0: count% = 0: size = 0π WHILE (size < 4) AND (count% < maxdwell)π temp = az * az - bz * bz + acπ bz = 2 * az * bz + bcπ az = temp: size = az * az + bz * bzπ count% = count% + 1π WENDπ IF (count% < maxdwell) AND (count% > highdwell) THEN highdwell = count%π IF count% <> maxdwell THEN GOSUB setpixelcolorπ i$ = INKEY$π IF i$ = CHR$(32) THEN GOTO restartπ NEXT: NEXTπ BEEPπwait1:π i$ = INKEY$π IF i$ = CHR$(32) THEN GOTO endofprogram:  ELSE GOTO wait1πsetpixelcolor:π c = count% MOD (numcolors - 1) + 1π cc = &HC00 + c: z = numrows - y + 1π inreg.ax = cc: inreg.bx = 0: inreg.cx = x: inreg.dx = zπ CALL interrupt(&H10, inreg, outreg)π RETURNπendofprogram:π SLEEP (500)π inreg.ax = &H3: CALL interrupt(&H10, inreg, outreg)π CLS : LOCATE 1, 1π INPUT "[R]un again or [E]xit to DOS"; q$π q$ = UCASE$(q$)π IF q$ = "R" THEN RUNπ CLS : LOCATE 14, 23: PRINT "Make sure you rename any saved files!"π SLEEP (2): SCREEN 0: CLS : ENDπrestart:π inreg.ax = &H3π CALL interrupt(&H10, inreg, outreg)π RUNπJoshua Dickerson               SPRITE(BITMAP) EDITOR          FidoNet QUIK_BAS Echo          04-23-96 (21:25)       QB, QBasic, PDS        124  2973     BITMAP.BAS  '    Here is a simple bitmap editor i wrote to aid in the design of my games..π'You start out in zoom mode where you can edit individual pixils of yourπ'bitmap, and as soon as you press esc, it automaticly writes a qBasic file withπ'data statements and a loader for them..use the numeric keypad to move aroundπ'and the , and . to select the colors (Actually < > without the shift hehπ'heh).. hit space to set the point to the current color.. An "X" will denoteπ'where you are, but you will not see the changes to that pixil until you moveπ'the cursor away from the spot you were working on.ππDECLARE SUB UpdateScrollBar ()πDECLARE SUB Display ()ππDIM SHARED x, y, xMax, yMax, SelectedColorππCLSπINPUT "Bitmap X size ->", xMaxπINPUT "Bitmap Y size ->", yMaxππDIM SHARED Bmp(xMax, yMax) AS STRING * 1πSCREEN 13ππLOCATE 23, 1πPRINT "v"πUpdateScrollBarπDisplayπDO WHILE a$ <> CHR$(27)π   SELECT CASE a$π      CASE ","π         SelectedColor = SelectedColor - 1π         IF SelectedColor < 0 THEN SelectedColor = 255π         UpdateScrollBarπ      CASE "."π         SelectedColor = SelectedColor + 1π         IF SelectedColor > 255 THEN SelectedColor = 0π         UpdateScrollBarπ      CASE " "π         Bmp(x, y) = CHR$(SelectedColor)π         Displayπ      CASE "4"π         IF x > 0 THEN x = x - 1π         Displayπ      CASE "6"π         IF x < xMax THEN x = x + 1π         Displayπ      CASE "8"π         IF y > 0 THEN y = y - 1π         Displayπ      CASE "2"π         IF y < yMax THEN y = y + 1π         Displayπ   END SELECTππ   LOCATE 7, 7π   COLOR SelectedColorπ   PRINT "X";π π   a$ = INPUT$(1)πLOOPππCLSπFOR i = 0 TO xMaxπ   FOR j = 0 TO yMaxπ      PSET (i, j), ASC(Bmp(i, j))π   NEXTπNEXTππSize% = 4 + INT(((xMax + 1) / 2) * (yMax + 1))πDIM BitMap%(Size%)ππGET (0, 0)-(xMax, yMax), BitMap%ππOPEN "Test.bas" FOR OUTPUT AS #1πPRINT #1, "SCREEN 13"πPRINT #1, "DIM BitMap%("; Size%; ")"πPRINT #1, "FOR I = 0 to"; Size%πPRINT #1, "   READ BitMap%(I)"πPRINT #1, "NEXT"πPRINT #1, ""πPRINT #1, "PUT (0,0), BitMap%"πPRINT #1, "END"πPRINT #1, ""πPRINT #1, "DATA ";ππFOR i = 0 TO Size% - 1π   x = x + 1π  π   PRINT #1, "&H" + HEX$(BitMap%(i));π   IF x > 8 THENπ      x = 0π      PRINT #1, ""π      PRINT #1, "DATA ";π   ELSEπ      PRINT #1, ", ";π   END IFπ   πNEXTπPRINT #1, "&H" + HEX$(BitMap%(Size%))ππCLOSEππSUB Displayπ   CONST WindowSize = 6ππ   FOR i = -WindowSize TO WindowSizeπ      LOCATE WindowSize + 1 + i, 1π      FOR j = -WindowSize TO WindowSizeπ         IF j + x >= 0 AND i + y >= 0 AND j + x <= xMax AND i + y <= yMax THENπ            COLOR ASC(Bmp(j + x, i + y))π            PRINT CHR$(219);π         ELSEπ            COLOR 15π            PRINT CHR$(178);π         END IFπ      NEXTπ   NEXTπEND SUBππSUB UpdateScrollBarπ   LOCATE 24, 1π   FOR i = 0 TO 39π      COLOR (i + SelectedColor) MOD 255π      PRINT CHR$(219);π   NEXTπEND SUBπTyler Barnes                   MONITOR INTERRUPTS             FidoNet QUIK_BAS Echo          04-15-96 (02:22)       QB, PDS                88   2710     TRAPINT.BAS 'Well, this code may be kind of useless, but it's something that I was messingπ'with, and decided to post. I don't really have a use for it, maybe someoneπ'else does... It could probably be written better as well. You can see I don'tπ'have a high opinion on this code. <G>π'It allows you to monitor interrupts... Sort of pseudo-trapping.ππDECLARE FUNCTION CalledInterrupt% (intnum%)πDECLARE SUB TrapInterrupt (intnum%, ExitProc%)πDECLARE SUB RestoreInterrupt (intnum%)π'$INCLUDE: 'qb.bi'πDIM SHARED InregX AS RegTypeX, OutregX AS RegTypeXπDIM IntSegs(0 TO 255) AS INTEGER, IntOffs(0 TO 255) AS INTEGERπDIM IntCode(0 TO 255) AS STRING * 25π πCONST Abort = 0, Continue = 1, All = -1π π'Pseudo interrupt trapperπ'Future enhancements: Decrease memory used?π'                     Return Registersπ π πTrapInterrupt 5, AbortπDOπLOOP UNTIL CalledInterrupt(5)πRestoreInterrupt AllππDEFINT A-ZπFUNCTION CalledInterrupt (intnum%)πSHARED Interrupts AS STRING * 256πIF MID$(Interrupts, intnum% + 1, 1) = CHR$(2) THENπMID$(Interrupts, intnum% + 1, 1) = CHR$(1)πCalledInterrupt = -1πELSEπCalledInterrupt = 0πEND IFπEND FUNCTIONππSUB RestoreInterrupt (intnum)πSHARED Interrupts AS STRING * 256, IntSegs() AS INTEGER, IntOffs() AS INTEGERπIF intnum < 0 THENπFOR I% = 1 TO 256πIF MID$(Interrupts, I%, 1) <> CHR$(0) THENπInregX.Ax = &H2500 + (I% - 1)πInregX.DS = IntSegs(I% - 1)πInregX.Dx = IntOffs(I% - 1)πCALL INTERRUPTX(&H21, InregX, OutregX)πEND IFπNEXT I%πELSEπInregX.Ax = &H2500 + intnumπInregX.DS = IntSegs(intnum)πInregX.Dx = IntOffs(intnum)πCALL INTERRUPTX(&H21, InregX, OutregX)πEND IFπEND SUBππSUB TrapInterrupt (intnum, ExitProc)πSHARED IntCode() AS STRING * 25, Interrupts AS STRING * 256πSHARED IntSegs() AS INTEGER, IntOffs() AS INTEGERπSTATIC FirstTimeπIF FirstTime = 0 THENπFirstTime = 1πFOR I% = 0 TO 255πMID$(Interrupts, I% + 1, 1) = CHR$(0)πNEXT I%πEND IFπInregX.Ax = &H3500 + intnumπCALL INTERRUPTX(&H21, InregX, OutregX)πIntSegs(intnum) = OutregX.ESπIntOffs(intnum) = OutregX.BxπMID$(Interrupts, intnum + 1) = CHR$(1)πIC$ = CHR$(6) + CHR$(&H55) + CHR$(&H50) + CHR$(&HB8)πIC$ = IC$ + MKI$(VARSEG(Interrupts))πIC$ = IC$ + CHR$(&H8E) + CHR$(&HC0) + CHR$(&HBD) + MKI$(VARPTR(Interrupts) + intnum)πIC$ = IC$ + CHR$(&HB0) + CHR$(2) + CHR$(&H26) + CHR$(&H88) + CHR$(&H46)πIC$ = IC$ + CHR$(0) + CHR$(&H58) + CHR$(&H5D) + CHR$(7)πIF ExitProc = 0 THENπIC$ = IC$ + CHR$(&HCF)πELSEπIC$ = IC$ + CHR$(&HEA) + MKI$(IntOffs(intnum)) + MKI$(IntSegs(intnum))πEND IFπIntCode(intnum) = IC$πInregX.Ax = &H2500 + intnumπInregX.DS = VARSEG(IntCode(intnum))πInregX.Dx = VARPTR(IntCode(intnum))πCALL INTERRUPTX(&H21, InregX, OutregX)πEND SUBππEric Carr                      SIMULTANEOUS KEY DEMO          FidoNet QUIK_BAS Echo          03-18-96 (13:12)       QB, QBasic, PDS        70   3011     KEYINPUT.BAS'Ok..Here is the sample keyboard routine I promised..I haven't tested it on anyπ'other computer excpet mine, but it should work for anyone..  This program letsπ'you move a box around by pressing the arrow keys..The acual routine in only 4π'lines as i have marked..This program requires a minimum of a 486sx 25mhz ifπ'not compiled to run fast enough for all the keys to be updated..I alsoπ'reprogrammed the internal timer from 18.2 to 30, so I could time it to 30 fps.π'To see if a key is being currently pressed, the variable KS is used (IFπ'KS(75)=1 THEN button is pressed). Instead of ASCII, this uses scan codes,π'which you can look at in the QB help..Hope you can understand it! :)ππ DEFINT A-Z: DIM B(300): CLSππ N& = 39772                  'Reprogram the timer to 30hzπ LB& = N& AND &HFF           'instead of 18.2 (for 30 framesπ HB& = (N& / 256) AND &HFF   'per second.)π OUT &H43, &H3C: OUT &H40, LB&: OUT &H40, HB&ππ DIM KS(255), SC(255), DU(255)π FOR E = 0 TO 127      ' Setup key data table KSC()π SC(E) = E: DU(E) = 1π NEXTπ FOR E = 128 TO 255π SC(E) = E - 128: DU(E) = 0π NEXTππ SCREEN 13: COLOR 4π LOCATE 10, 3: PRINT "Keyboard input routine by Eric Carr"π COLOR 7: PRINT : COLOR 2π PRINT "  Use the arrow keys to move the box."π PRINT "Note that you can press two or more keys"π PRINT "    at once for diagnal movement!"π PRINT : COLOR 8: PRINT "          Press [Esc] to quit"π X = 150: Y = 100: BX = X: BY = Yπ DEF SEG = 0π POKE (1132), 0π GET (X, Y)-(X + 15, Y + 15), Bπ DO  'main loopπT:π I$ = INKEY$       ' So the keyb buffer don't get full     \routine/π I = INP(&H60)     ' Get keyboard scan code from port 60h   \lines/π OUT &H61, INP(&H61) OR &H82: OUT &H20, &H20       '         \!!!/π KS(SC(I)) = DU(I) ' This says what keys are pressed          \!/π π IF PEEK(1132) < 1 THEN GOTO T  'If not enough time was passed goto Tπ POKE (1132), 0  'reset timer againπ BX = X: BY = Yπ IF KS(75) = 1 THEN XC = XC - 2: IF XC < -15 THEN XC = -15π IF KS(77) = 1 THEN XC = XC + 2: IF XC > 15 THEN XC = 15π IF KS(72) = 1 THEN YC = YC - 2: IF YC < -15 THEN YC = -15π IF KS(80) = 1 THEN YC = YC + 2: IF YC > 15 THEN YC = 15π IF XC > 0 THEN XC = XC - 1 ELSE IF XC < 0 THEN XC = XC + 1π IF YC > 0 THEN YC = YC - 1 ELSE IF YC < 0 THEN YC = YC + 1π Y = Y + YC: X = X + XCπ IF X > 300 THEN X = 300 ELSE IF X < 0 THEN X = 0π IF Y > 180 THEN Y = 180 ELSE IF Y < 0 THEN Y = 0π IF X <> BX OR Y <> BY THENπ WAIT 936, 8: PUT (BX, BY), B, PSETπ GET (X, Y)-(X + 15, Y + 15), B: LINE (X, Y)-(X + 15, Y + 15), 9, BFπ END IFπ LOOP UNTIL KS(1) = 1 'loop until [Esc] (scan code 1) is pressedππ N& = 65535                      'Program the timer back toπ LB& = N& AND &HFF               '18.2hz before exiting!π HB& = (N& / 256) AND &HFFπ OUT &H43, &H3C: OUT &H40, LB&: OUT &H40, HB&ππ OUT &H61, INP(&H61) OR &H82: OUT &H20, &H20π CLEAR   'need to have this if reprograming the timerπ END      'I think this ends the program. I'm not quite sure.. :)ππEric Benson                    DETECT KEYDOWN & KEYUP EVENTS  comp.lang.basic.misc           04-11-96 (18:17)       QB, QBasic, PDS        119  3539     KEYPRESS.BAS'This routine I wrote to detect keydown and keyup events works great (using π'INP(&H60) as someone suggested a while back). To get the ascii of the key thatπ'was pressed I am using INKEY$.  It sometimes returns zero, I guess the BIOSπ'hasn't translated the key when I call INKEY$.  But if you run the programπ'below you may notice a fairly substantial (0.5 sec) delay sometimes.  π'Suggestions to get around this?π'I figure I could load an array with ascii codes and index it with the scancode π'i.e. ascii=scan2ascii(scancode), but I would still need to take care of the π'shift key.π'Or maybe I should run this in straight DOS and not in a Win95 DOS box.ππ'Program Keypress.bas by Eric Benson - April 1996πDEFINT A-ZπDECLARE SUB KernelKeyPress (scancode AS INTEGER, ascii AS INTEGER, keystate AS INTEGER)πREM DECLARE SUB BYTECOPY (SEG SOURCE AS ANY, SEG DESTINATION AS ANY, NUMBYTES&)πCONST TRUE = -1, FALSE = 0πCONST keybuffermax = 10, kdown = 1, kpressed = 2, kup = 3πTYPE keyvarπ  keyin AS INTEGERπ  keyup AS INTEGERπ  scancode AS INTEGERπ  ascii AS INTEGERπ  extended AS INTEGERπEND TYPEππCLSπREM GOTO testπDOπ  keystate = 0π  KernelKeyPress scancode, ascii, keystateπ  IF keystate = kdown THENπ    PRINT "keydown     "; scancode, asciiπ  ELSEIF keystate = kup THENπ    PRINT "keyup       "; scancode, asciiπ  END IFπLOOP UNTIL scancode = 1πENDππtest:π'used to look at what the keyboard is outputingπDOπ  keyin = INP(&H60)π'  LOCATE 1, 1: PRINT "    "π  LOCATE 1, 1: PRINT keyinπ  b$ = INKEY$πLOOP UNTIL keyin = 1πENDππSUB KernelKeyPress (scancode AS INTEGER, ascii AS INTEGER, keystate AS INTEGER)πSTATIC init AS INTEGER, buffer() AS keyvarπSTATIC ibuf AS INTEGER, pressedkey AS INTEGERπIF init THENπ  keyin = INP(&H60)π  b$ = INKEY$π  'Warning inkey$ above does not always trap the keystrokeπ  IF keyin > 128 AND pressedkey THENπ    FOR i = 1 TO ibufπ      IF keyin = 170 OR buffer(i).keyup = keyin THENπ        scancode = buffer(i).scancodeπ        ascii = buffer(i).asciiπ        keystate = kupπ        IF ibuf = 1 THENπ          pressedkey = 0π        ELSEIF i < ibuf THENπ          pressedkey = buffer(i).keyupπ          FOR j = i TO ibuf - 1π            SWAP buffer(j), buffer(j + 1)π          NEXTπ          REM BYTECOPY buffer(i + 1), buffer(i), (ibuf - i) * 10π        ELSEπ          'top key in buffer is unpressedπ          pressedkey = buffer(i).keyupπ        END IFπ        ibuf = ibuf - 1π        EXIT SUBπ      END IFπ    NEXTπ  END IFπ  IF pressedkey <> keyin AND keyin < 129 THENπ    IF ibuf THENπ      FOR i = 1 TO ibufπ        IF buffer(i).keyin = keyin THEN EXIT SUBπ      NEXTπ    END IFπ    IF ibuf < keybuffermax THENπ      ibuf = ibuf + 1π      buffer(ibuf).keyin = keyinπ      buffer(ibuf).keyup = keyin + 128π     π      'Remove this IF..ENDIF block for normal executionπ      'Will hang if shift is pressedπ      IF LEN(b$) = 0 THENπ        DOπ          b$ = INKEY$π        LOOP UNTIL LEN(b$)π      END IFπ     π      IF LEN(b$) = 2 THENπ        buffer(ibuf).extended = ASC(RIGHT$(b$, 1))π      ELSEIF LEN(b$) THENπ        buffer(ibuf).ascii = ASC(b$)π      ELSEπ        buffer(ibuf).ascii = 0π      END IFπ      buffer(ibuf).scancode = keyinπ      pressedkey = keyinπ      scancode = keyinπ      ascii = buffer(ibuf).asciiπ      keystate = kdownπ      EXIT SUBπ    END IFπ  END IFπELSEπ  DIM buffer(1 TO keybuffermax) AS keyvarπ  ibuf = 0π  pressedkey = 0π  init = TRUEπEND IFπEND SUBπJeremy Stanley                 LEFT/RIGHT SHIFT (USING BITS)  FidoNet QUIK_BAS Echo          04-13-96 (11:22)       QB, QBasic, PDS        36   916      BITKEY.BAS  '> "There's a byte in the BIOS area, the bits of which say which Ctrl, Alt andπ'> Shift keys are depressed.  There's another which helps you differentiate leftπ'> from right keys.  But I can't remember what they are... Anyone?"ππ'The first byte in question is at 0040:0017.  This example program shouldπ'demonstrate how to read the status of these keys:ππDEFINT A-ZππCLSπPRINT "Byte at 0040:0017  Press ESC to exit"πPRINT "   - bit 0 - Right shift"πPRINT "   - bit 1 - Left shift"πPRINT "   - bit 2 - Ctrl"πPRINT "   - bit 3 - Alt"πPRINT "   - bit 4 - Scroll lock"πPRINT "   - bit 5 - Num lock"πPRINT "   - bit 6 - Caps lock"πPRINT "   - bit 7 - Insert"ππDEF SEG = &H40ππDOπ  c = PEEK(&H17)π  FOR x = 0 TO 7π    LOCATE x + 2, 1π    e = 2 ^ xπ    PRINT (c AND e) \ eπ  NEXTπLOOP UNTIL INKEY$ = CHR$(27)ππDEF SEGππ'jeremy.stanley@darkstarbbs.comπ'http://pages.prodigy.com/perigee/ππTyler Barnes                   MEMORY VIEW                    FidoNet QUIK_BAS Echo          02-25-96 (22:04)       QB, PDS                556  13648    MEMVIEW.BAS DECLARE SUB TLOAD (File$, StartPos&)πDECLARE SUB TSAVE (File$, StartPos&, EndPos&)πDECLARE FUNCTION FileExist% (T$)πDECLARE FUNCTION GETINPUT$ (CHARS%)πDECLARE FUNCTION GETDEC$ (CHARS%)πDECLARE FUNCTION ProgramName$ ()πDECLARE SUB Box (topRow%, topCol%, lowRow%, lowCol%, Frg%, Bkg%)πDECLARE FUNCTION GETHEX$ (CHARS%)πDECLARE SUB FPRINT (NAT$, FL%)πCONST yes = 1, No = 0π'$INCLUDE: 'qb.bi'πSCREEN 0πDEFINT A-ZπStartLoc& = 0πStartSeg& = &H40πBorderColour% = 9πMemColour% = 7πInfoColour% = 15πMode$ = "H"πLiveBytes% = yesπLines% = 25πDIM Mods%(0 TO ((Lines% / 25) * 1439))πWIDTH , Lines%πMax& = 65535 - ((Lines% / 25) * 1439)πMain:πInvalid% = NoπCurEdit% = 0πCOLOR MemColour%, 0πDIM Regs AS RegTypeπLOCATE , , 0πCLSπCOLOR BorderColour%, 0πLOCATE Lines% - CINT((Lines% / 25) * 6.5), 1: PRINT STRING$(80, 196)πCOLOR 0, MemColour%πFOR I% = (Lines% - 2) TO Lines%πLOCATE I%, 1πFPRINT STRING$(80, " "), NoπNEXT I%πLOCATE Lines% - 2, 1πFPRINT "   F1=Edit  F2=Goto Addr  F3=Config  F4=Load file into memory  F5=Memory Dump", NoπLOCATE Lines% - 1, 1πFPRINT "       F6=Compare  F7=About MemoryView  F8=Mode  F9=Mem Search  ESC=Exit", NoπLOCATE Lines%, 1πFPRINT "   Use Pgup, Pgdn, Home, End, and arrow keys to move inside selected segment", NoπUpdate% = yesπDOπK$ = INKEY$πIF LEN(K$) THEN GOSUB MoveπIF Update% = yes THENπRegs.ax = &HB00πRegs.bx = BorderColour%πCALL INTERRUPT(&H10, Regs, Regs)πCOLOR MemColour%, 0πCOLOR InfoColour%, 0πIF LiveBytes% = yes THEN Update% = NoπLOCATE Lines% - 5, 1: FPRINT "Segment: " + HEX$(StartSeg&) + "h     ", NoπLOCATE Lines% - 4, 1: FPRINT "Offset: " + HEX$(StartLoc&) + "h to ", NoπFPRINT HEX$(StartLoc& + ((Lines% / 25) * 1439)) + "h          ", NoπLOCATE Lines% - 3, 1πPRINT "Mode: ";πIF Mode$ = "H" THEN PRINT "Hex" ELSE PRINT "Dec"πEND IFπSL% = -2πIF LiveBytes% = yes OR (LiveBytes% = No AND Update% = yes) THENπUpdate% = NoπFOR I& = StartLoc& TO StartLoc& + INT(Lines% / 25) * 1439πSL% = SL% + 2πDEF SEG = StartSeg&πChar% = PEEK(I&)πDEF SEG = &HB800πPOKE SL%, Char%πNEXT I&πEND IFπLOOPπMove:πSELECT CASE K$πCASE CHR$(0) + "M", "6": StartLoc& = StartLoc& + 1πIF StartLoc& > Max& THEN StartLoc& = Max&πCASE CHR$(0) + "K", "4": StartLoc& = StartLoc& - 1πIF StartLoc& < 0 THEN StartLoc& = 0πCASE CHR$(0) + "H", "8": StartLoc& = StartLoc& - 80πIF StartLoc& < 0 THEN StartLoc& = StartLoc& + 80πCASE CHR$(0) + "P", "2": StartLoc& = StartLoc& + 80πIF StartLoc& > Max& THEN StartLoc& = StartLoc& - 80πCASE CHR$(0) + "Q", "3": StartLoc& = StartLoc& + 1440πIF StartLoc& > Max& THEN StartLoc& = StartLoc& - 1440πCASE CHR$(0) + "I", "9": StartLoc& = StartLoc& - 1440πIF StartLoc& < 0 THEN StartLoc& = StartLoc& + 1440πCASE CHR$(0) + "G", "7": StartLoc& = 0πCASE CHR$(0) + "O", "1": StartLoc& = Max&πCASE CHR$(0) + "A"πIT% = InfoColour%: BT% = BorderColour%πBox 5, 26, 12, 52, InfoColour%, BorderColour%πCOLOR InfoColour%, BorderColour%πLOCATE 6, 28πSOUND 50, 1πFPRINT "  MemView Version 0.3", NoπLOCATE 8, 28πFPRINT "By D. Tyler Barnes,1996", NoπLOCATE 10, 28πFPRINT "       FREEWARE!", NoπLOCATE 11, 28πFPRINT " Tested on a 486dx2 80", NoπInfoColour% = IT%: BorderColour% = BT%πDO: Junk$ = INKEY$: LOOP UNTIL LEN(Junk$)πDEF SEG = &HB800πFOR C% = 691 TO 2027 STEP 2πPOKE C%, MemColour%πNEXT C%πCASE "", "", CHR$(0) + "", "Q", "q", "X", "x"πCOLOR 7, 0πRegs.ax = &HB00πRegs.bx = 0πCALL INTERRUPT(&H10, Regs, Regs)πCLSπENDπCASE CHR$(0) + "<"πLOCATE Lines% - 5, 40, 1πCOLOR InfoColour%, 0: FPRINT "Segment:Offset = ", NoπLastKey$ = ""πSeg$ = GETHEX$(4)πIF Seg$ = "" THEN GOTO NoMatterπLOCATE Lines% - 5, 62πFPRINT ": ", NoπOff$ = GETHEX$(4)πIF Off$ = "" THEN Off$ = "0000"πStartLoc& = VAL("&H" + Off$)πIF StartLoc& < 0 THEN StartLoc& = StartLoc& + 65536πIF StartLoc& > Max& THEN StartLoc& = Max&πStartSeg& = VAL("&H" + Seg$)πIF StartSeg& < 0 THEN StartSeg& = StartSeg& + 65536πNoMatter:πLOCATE Lines% - 5, 40, 0π2 FPRINT SPACE$(29), NoπCASE CHR$(0) + ";": GOSUB ByteEditor: GOTO MainπCASE CHR$(0) + "?"πTryAgain:πFOR R% = (Lines% - 5) TO (Lines% - 3)πLOCATE R%, 30, 0πFPRINT SPACE$(40), NoπNEXT R%πLOCATE Lines% - 5, 30, 1πFPRINT "Save memory dump as:", NoπF$ = GETINPUT$(12)πIF F$ = "" THEN GOTO FinishedπFE% = FileExist(F$)πIF FE% = yes THENπFOR R% = Lines% - 5 TO Lines% - 3πLOCATE R%, 30, 0πFPRINT SPACE$(40), NoπNEXT R%πBEEPπLOCATE Lines% - 5, 30: PRINT "File Exists!"πLOCATE Lines% - 4, 30: PRINT "Hit any key..."πDO: A$ = INKEY$: LOOP UNTIL LEN(A$)πGOTO TryAgainπEND IFπON ERROR GOTO InvalidFilenameπOPEN F$ FOR BINARY AS 1πON ERROR GOTO EHπCLOSE 1πIF Invalid% = yes THEN Invalid% = No: GOTO TryAgainπLOCATE Lines% - 4, 30: FPRINT "Offset ____h to ____h", NoπLastKey$ = ""πLOCATE Lines% - 4, 37: FO$ = GETHEX$(4)πLOCATE Lines% - 4, 46: SO$ = GETHEX$(4)πDEF SEG = StartSeg&πLOCATE Lines% - 3, 29πTSAVE F$, VAL("&H" + FO$), VAL("&H" + SO$)πFinished:πCOLOR MemColour%, 0πFOR R% = Lines% - 5 TO Lines% - 3πLOCATE R%, 30, 0πFPRINT SPACE$(40), NoπNEXT R%πCASE CHR$(0) + ">"πLOCATE Lines% - 5, 30, 1πFPRINT "Load File:", NoπF$ = GETINPUT$(12)πLOCATE , , 0πIF FileExist(F$) = No THENπBEEPπLOCATE Lines% - 5, 30πFPRINT "File Not Found!", NoπLOCATE Lines% - 4, 30πFPRINT "Hit Any Key...", NoπDO: A$ = INKEY$: LOOP UNTIL LEN(A$)πGOTO FinishedLoadπEND IFπLOCATE Lines% - 4, 30πFPRINT "Offset:____h", NoπLOCATE Lines% - 4, 37, 1πLastKey$ = ""πO$ = GETHEX$(4)πDEF SEG = StartSeg&πLOCATE Lines% - 3, 30, 0πTLOAD F$, VAL("&H" + O$)πFinishedLoad:πFOR L% = Lines% - 5 TO Lines% - 3πLOCATE L%, 30, 0πFPRINT SPACE$(20), NoπNEXT L%πCASE "[", "<", ",": StartSeg& = StartSeg& - 1πIF StartSeg& < 0 THEN StartSeg& = 0πCASE "]", ".", ">": StartSeg& = StartSeg& + 1πIF StartSeg& > 65535 THEN StartSeg& = 65535πEND SELECTπEndSelect:πLOCATE , , 0πUpdate% = yesπRETURNπByteEditor:πCOLOR 0, MemColour%πFOR I% = Lines% - 2 TO Lines%πLOCATE I%, 1πFPRINT SPACE$(80), NoπNEXT I%πLOCATE Lines% - 2, 1πFPRINT "F1 = Enter Hex Value   F2 = Enter Decimal Value   F3 = Quit   F4 = Save and Quit", NoπLOCATE Lines% - 1, 1πLOCATE Lines%, 1πFPRINT "        Use Pgup, Pgdn, Home, End, and arrow keys to move within window", NoπCOLOR InfoColour%, 0πU2% = yes: Typed% = No: SaveIt% = NoπLOCATE , , 1πCurCol% = CurEdit%πFOR I% = 0 TO ((Lines% / 25) * 1439)πDEF SEG = StartSeg&πMods%(I%) = PEEK(StartLoc& + I%)πDEF SEG = &HB800πPOKE I% * 2, Mods%(I%)πNEXT I%πDOπK$ = INKEY$πNewVal:πIF LEN(K$) THEN U2% = yesπSELECT CASE K$πCASE CHR$(0) + "M", "6": CurCol% = CurCol% + 2πIF CurCol% > 2879 THEN CurCol% = CurCol% - 2πCASE CHR$(0) + "K", "4": CurCol% = CurCol% - 2πIF CurCol% < 0 THEN CurCol% = CurCol% + 2πCASE CHR$(0) + "H", "8": CurCol% = CurCol% - 160πIF CurCol% < 0 THEN CurCol% = CurCol% + 160πCASE CHR$(0) + "P", "2": CurCol% = CurCol% + 160πIF CurCol% > 2879 THEN CurCol% = CurCol% - 160πCASE CHR$(0) + "G": CurCol% = 0πCASE CHR$(0) + "O": CurCol% = (Lines% / 25) * 2878πCASE CHR$(0) + "I": CurCol% = CurCol% - ((Y% - 1) * 160)πCASE CHR$(0) + "Q": CurCol% = CurCol% + ((17 * 160) - ((Y% - 1) * 160))πCASE CHR$(0) + ";"πLOCATE Lines% - 5, 20, 1πFPRINT "Hex:", NoπLastKey$ = ""πH$ = GETHEX$(2)πK$ = CHR$(VAL("&H" + H$))πLOCATE Lines% - 5, 20, 0: PRINT "       ";πGOTO NewValπCASE CHR$(0) + "<"πReEnter:πLOCATE Lines% - 5, 20, 0πPRINT SPACE$(30);πLOCATE Lines% - 5, 20, 1πFPRINT "Dec:", NoπLastKey$ = ""πH$ = GETDEC$(3)πIF VAL(H$) > 255 THEN GOTO ReEnterπK$ = CHR$(VAL(H$))πLOCATE Lines% - 5, 20, 0: PRINT "       ";πGOTO NewValπCASE ""πCASE CHR$(0) + "=": SaveIt% = No: EXIT DOπCASE CHR$(0) + ">": SaveIt% = yes: EXIT DOπCASE ELSEπTyped% = yesπMods%(INT(CurCol% / 2)) = ASC(K$)πCurCol% = CurCol% + 2πIF CurCol% > ((Lines% / 25) * 2878) THEN CurCol% = ((Lines% / 25) * 2878)πEND SELECTπIF U2% = yes THENπY% = INT(CurCol% / 160) + 1πX% = (INT(CurCol% / 2) + 1) - (80 * (INT(CurCol% / 160)))πMemPos& = INT(CurCol% / 2) + StartLoc&πDEF SEG = StartSeg&πCurByte% = Mods%(INT(CurCol% / 2))πFOR C% = Lines% - 5 TO Lines% - 3πLOCATE C%, 1: PRINT SPACE$(80);πNEXT C%πLOCATE Lines% - 5, 1: PRINT "Segment: "; HEX$(StartSeg&) + "h"πLOCATE Lines% - 4, 1: PRINT "Offset: "; HEX$(MemPos&) + "h"πLOCATE Lines% - 3, 1: PRINT "Char:"; HEX$(CurByte%) + "h (" + LTRIM$(STR$(CurByte%)) + "d)"πDEF SEG = &HB800πLOCATE Y%, X%, 1: POKE CurCol%, CurByte%πIF Typed% = yes THEN POKE CurCol% - 2, Mods%(INT((CurCol% - 2) / 2)): Typed% = NoπU2% = NoπEND IFπLOOPπIF SaveIt% = yes THENπDEF SEG = StartSeg&πFOR I% = 0 TO (Lines% / 25) * 1439πPOKE StartLoc& + I%, Mods%(I%)πNEXT I%πEND IFπLOCATE , , 0πRETURNπEH:πCLSπCOLOR 7, 0πPRINT "FATAL ERROR; PROGRAM HALTED."πPRINT "Error#"; ERRπENDπInvalidFilename:πInvalid% = yesπRESUME NEXTππSUB Box (topRow%, topCol%, lowRow%, lowCol%, Frg%, Bkg%)πCOLOR Bkg%, Bkg%πIF Bkg% >= 8 THEN Bkg% = Bkg% - 8πFOR I% = topRow% TO lowRow%πLOCATE I% + 1, topCol% + 2πPRINT STRING$(lowCol% - topCol% + 1, 176)πNEXT I%πCOLOR Bkg%, Frg%πFOR I% = topRow% TO lowRow%πLOCATE I%, topCol%πPRINT STRING$(lowCol% - topCol% + 1, 219)πNEXT I%πCOLOR Frg%, Bkg%πLOCATE topRow%, topCol%πPRINT "┌" + STRING$(lowCol% - topCol% - 1, 196) + "┐"πFOR I% = (topRow% + 1) TO (lowRow% - 1)πLOCATE I%, topCol%πPRINT "│"πLOCATE I%, lowCol%πPRINT "│"πNEXTπLOCATE lowRow%, topCol%πPRINT "└" + STRING$(lowCol% - topCol% - 1, 196) + "┘"πCOLOR 7, 0πEND SUBππDEFSNG A-ZπFUNCTION FileExist% (T$)πDEFINT A-ZπDIM F AS STRING * 64πDIM Inx AS RegTypeXπDIM Outx AS RegTypeXπInx.ax = &H2F00πCALL INTERRUPTX(&H21, Inx, Outx)πDTASeg = Outx.esπDTAAddr = Outx.bxπF$ = LTRIM$(RTRIM$(UCASE$(T$))) + CHR$(0)πInx.ds = VARSEG(F$)πInx.dx = VARPTR(F$)πInx.ax = &H4E00πInx.cx = -1πCALL INTERRUPTX(&H21, Inx, Outx)πIF Outx.flags AND 1 THENπFileExist% = 0πELSEπFileExist% = 1πEND IFπEND FUNCTIONππSUB FPRINT (NAT$, FL%)πYT = (80 - POS(0)) + 1πBS = INSTR(LEFT$(NAT$, YT), "")πIF BS < 1 THENπPRINT LEFT$(NAT$, YT);πELSEπBST$ = LEFT$(NAT$, YT): GOSUB PrintWithBackspacesπEND IFπIF LEN(NAT$) - YT > 0 THENπBS = INSTR(RIGHT$(NAT$, LEN(NAT$) - YT), "")πELSEπBS = 0πEND IFπIF BS < 1 THENπIF LEN(NAT$) - YT > 0 THEN PRINT RIGHT$(NAT$, LEN(NAT$) - YT);πELSEπBST$ = RIGHT$(NAT$, LEN(NAT$) - YT): GOSUB PrintWithBackspacesπEND IFπIF FL = yes THEN PRINTπEXIT SUBπPrintWithBackspaces:πDO UNTIL INSTR(BST$, "") < 1πTBP = INSTR(BST$, "")πPRINT LEFT$(BST$, TBP - 1);πIF POS(0) > 1 THENπLOCATE CSRLIN, POS(0) - 1: PRINT " "; : LOCATE CSRLIN, POS(0) - 1πEND IFπBST$ = RIGHT$(BST$, LEN(BST$) - TBP)πLOOPπPRINT BST$;πRETURNπEND SUBππFUNCTION GETDEC$ (CHARS)πSHARED LastKey$πLOCATE , , 1πDOπIF LEN(LastKey$) THENπA$ = LastKey$πLastKey$ = ""πELSEπA$ = UCASE$(INKEY$)πEND IFπSELECT CASE A$πCASE ""πIF Counter > 0 THENπCounter = Counter - 1πPRINT " ";πTotal$ = LEFT$(Total$, LEN(Total$) - 1)πEND IFπCASE ""πCASE "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"πIF Counter < CHARS THENπCounter = Counter + 1πPRINT A$;πTotal$ = Total$ + A$πELSEπLastKey$ = A$πEXIT DOπEND IFπEND SELECTπLOOP UNTIL A$ = CHR$(13)πDO UNTIL LEN(Total$) = CHARSπTotal$ = "0" + Total$πLOOPπPRINTπGETDEC$ = Total$πEND FUNCTIONππFUNCTION GETHEX$ (CHARS)πSHARED LastKey$πLOCATE , , 1πDOπIF LEN(LastKey$) THENπA$ = LastKey$πLastKey$ = ""πELSEπA$ = UCASE$(INKEY$)πEND IFπSELECT CASE A$πCASE ""πIF Counter > 0 THENπCounter = Counter - 1πPRINT " ";πTotal$ = LEFT$(Total$, LEN(Total$) - 1)πEND IFπCASE ""πCASE "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"πIF Counter < CHARS THENπCounter = Counter + 1πPRINT A$;πTotal$ = Total$ + A$πELSEπLastKey$ = A$πEXIT DOπEND IFπEND SELECTπLOOP UNTIL A$ = CHR$(13)πIF LEN(Total$) THENπDO UNTIL LEN(Total$) = CHARSπTotal$ = "0" + Total$πLOOPπEND IFπPRINTπGETHEX$ = Total$πEND FUNCTIONππFUNCTION GETINPUT$ (CHARS)πLOCATE , , 1πDOπA$ = UCASE$(INKEY$)πSELECT CASE A$πCASE ""πIF Counter > 0 THENπCounter = Counter - 1πPRINT " ";πTotal$ = LEFT$(Total$, LEN(Total$) - 1)πEND IFπCASE "", ";", "*", "?", "/", "\", ":", ""πCASE CHR$(13): EXIT DOπCASE ELSEπIF Counter < CHARS THENπCounter = Counter + 1πPRINT A$;πTotal$ = Total$ + A$πEND IFπEND SELECTπLOOP UNTIL A$ = CHR$(13)πPRINTπGETINPUT$ = Total$πEND FUNCTIONππFUNCTION ProgramName$ STATICπDIM Regs AS RegTypeπRegs.ax = &H5100πINTERRUPT &H21, Regs, RegsπDEF SEG = Regs.bxπEnvSeg% = PEEK(&H2C) + PEEK(&H2D) * 256πDEF SEG = EnvSeg%πDOπByte% = PEEK(Offset%)πIF Byte% = 0 THENπCount% = Count% + 1πIF Count% AND EXEFlag% THENπEXIT DOπELSEIF Count% = 2 THENπEXEFlag% = -1πOffset% = Offset% + 2πEND IFπELSEπCount% = 0πIF EXEFlag% THENπTemp$ = Temp$ + CHR$(Byte%)πEND IFπEND IFπOffset% = Offset% + 1πLOOPπDEF SEGπProgramName$ = Temp$πTemp$ = ""πEND FUNCTIONππSUB TLOAD (File$, StartPos&)πL = CSRLIN: C = POS(0)πIF StartPos& < 0 THEN StartPos& = StartPos& + 65536πIF EndPos& < 0 THEN EndPos& = EndPos& + 65536πZ% = FREEFILEπOPEN File$ FOR BINARY AS Z%πFLength& = LOF(Z%)πDO UNTIL EOF(Z%)πData$ = INPUT$(1, Z%)πIF LEN(Data$) THEN POKE StartPos&, ASC(Data$)πLOCATE L, C, 0πPRINT INT((LOC(Z%) / FLength&) * 100); "%";πStartPos& = StartPos& + 1πLOOPπCLOSE Z%πEND SUBππSUB TSAVE (File$, StartPos&, EndPos&)πL = CSRLIN: C = POS(0)πIF StartPos& < 0 THEN StartPos& = StartPos& + 65536πIF EndPos& < 0 THEN EndPos& = EndPos& + 65536πZ% = FREEFILEπOPEN File$ FOR OUTPUT AS Z%πFOR C& = StartPos& TO EndPos& STEP 1πPRINT #Z%, CHR$(PEEK(C&));πLOCATE L, C, 0πPRINT INT((C& / EndPos&) * 100); "%";πNEXT C&πCLOSE Z%πEND SUBππThe ABC Programmer             SIMPLE QWK READER              Try ADVANCED QWK READER        03-06-96 (17:43)       QB, QBasic, PDS        166  5089     QWKREAD.BAS '===================[ Simple Little QWK Reader ]=======================π'π' This SIMPLE little ditty let's you read SWAG or QWK files which haveπ' EXACTLY the same format.  Additions to dump to file implemented.π' Original PASCAL code by Swag Support Team (Gayle Davis)π' Converted and optimized to BASIC by William Yu (03-06-96)π'π'----------------------------------------------------------------------ππDECLARE SUB DumpHeader (QWK AS ANY)πDECLARE SUB ReadMessage (HDR AS ANY, RelNum&, Chunks)πDECLARE SUB ReadMsg (NumChunks)πDECLARE SUB ReadWriteHdr (QWK AS ANY)ππCONST Height = 25                     ' 25/43/50πCONST False = 0                       ' False = 0πCONST True = NOT False                ' True = -1πCONST DumpQWKtoFile = False           ' Dump messages to file?π                                      ' True = Dump to fileπ                                      ' False = View from screenπCONST DumpQWKFileName$ = "DUMP.MSG"   ' Dump messages to this file nameπCONST QWKPacket$ = "MESSAGES.DAT"     ' MESSAGES.DAT or *.SWGπ                                      ' Specify the path if requiredπTYPE MSGDatHdr                        ' MESSAGES.DAT File Structureπ    Status   AS STRING * 1            '  128 bytes altogetherπ    MSGNum   AS STRING * 7π    Date     AS STRING * 8π    Time     AS STRING * 5π    UpTO     AS STRING * 25           ' Always UpperCaseπ    UpFROM   AS STRING * 25           ' Always UpperCaseπ    Subject  AS STRING * 25π    PassWord AS STRING * 12           ' Never/rarely usedπ    ReferNum AS STRING * 8π    NumChunk AS STRING * 6π    Alive    AS STRING * 1π    LeastSig AS STRING * 1            ' Conference #π    MostSig  AS STRING * 1            ' Used for conf. # greater than 255π    Reserved AS STRING * 3πEND TYPEππDIM QWK AS MSGDatHdrππWIDTH 80, HeightπCLSππ  OPEN QWKPacket$ FOR BINARY AS #1π  IF DumpQWKtoFile THEN OPEN DumpQWKFileName$ FOR OUTPUT AS #2π  SEEK #1, 129  ' Skip Copyright informationπ  Count& = 129π  WHILE Count& < LOF(1)π        ReadMessage QWK, Count&, Chunksπ        IF DumpQWKtoFile THENπ          LOCATE 1, 1: PRINT "Complete:";π          PRINT USING "###.#%"; (Count& + (128 * Chunks)) / LOF(1) * 100π          PRINT #2,π          A$ = INKEY$                        ' ESC Key quits dumpingπ        ELSEπ          PRINTπ          PRINT "Press any key to continue .. (ESC Key quits)";π          A$ = INPUT$(1)π          CLSπ        END IFπ        IF A$ = CHR$(27) THEN CLOSE : END    ' ESC quits Viewing or Dumpingπ        Count& = Count& + (128 * Chunks)π  WENDπ  CLOSEπ  ENDππSUB DumpHeader (QWK AS MSGDatHdr)π   π    PRINT #2, STRING$(80, "=")π    PRINT #2, "   Date: "; QWK.Date; " ("; QWK.Time; ")";π    PRINT #2, , , "Number: "; QWK.MSGNumπ    PRINT #2, "   From: "; QWK.UpFROM;π    PRINT #2, , "Refer#: "; QWK.ReferNumπ    PRINT #2, "     To: "; QWK.UpTO;π    PRINT #2, , " Recvd: ";π    InCase$ = "-`^#"π    IF INSTR(QWK.Status, InCase$) THENπ      PRINT #2, "YES"π    ELSEπ      PRINT #2, "NO"π    END IFπ    PRINT #2, "Subject: "; QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT #2, , "  Conf: "; "("; Conference$; ")"π    PRINT #2, STRING$(80, "-")ππEND SUBππSUB ReadMessage (QWK AS MSGDatHdr, RelNum&, Chunks)π π  SEEK #1, RelNum&π  ReadWriteHdr QWKπ  Chunks = VAL(QWK.NumChunk)π  ReadMsg ChunksππEND SUBππSUB ReadMsg (NumChunks)ππ  DIM Buff AS STRING * 128ππ  FOR J = 1 TO NumChunks - 1π    GET #1, , Buffπ    FOR I = 1 TO 128π      IF MID$(Buff, I, 1) = CHR$(227) THENπ        IF DumpQWKtoFile THEN PRINT #2,  ELSE PRINTπ      ELSEπ        IF DumpQWKtoFile THENπ          PRINT #2, MID$(Buff, I, 1);π        ELSEπ          PRINT MID$(Buff, I, 1);π        END IFπ      END IFπ      IF CSRLIN = Height - 1 THENπ        LOCATE Height, 1: PRINT "Hit Any Key for Next Page...";π        A$ = INPUT$(1)π        LOCATE 6, 1: PRINT STRING$((Height - 7) * 80, " ");π        LOCATE 6, 1π      END IFπ    NEXT Iπ  NEXT JππEND SUBππSUB ReadWriteHdr (QWK AS MSGDatHdr)ππ    GET #1, , QWK.Statusπ    GET #1, , QWK.MSGNumπ    GET #1, , QWK.Dateπ    GET #1, , QWK.Timeπ    GET #1, , QWK.UpTOπ    GET #1, , QWK.UpFROMπ    GET #1, , QWK.Subjectπ    GET #1, , QWK.PassWordπ    GET #1, , QWK.ReferNumπ    GET #1, , QWK.NumChunkπ    GET #1, , QWK.Aliveπ    GET #1, , QWK.LeastSigπ    GET #1, , QWK.MostSigπ    GET #1, , QWK.Reservedππ  IF DumpQWKtoFile THENπ    DumpHeader QWKπ  ELSEπ    PRINT "Date: "; QWK.Date; " ("; QWK.Time; ")";π    PRINT , , "Number: "; QWK.MSGNumπ    PRINT "From: "; QWK.UpFROM;π    PRINT , "Refer#: "; QWK.ReferNumπ    PRINT "  To: "; QWK.UpTO;π    PRINT , " Recvd: ";π    InCase$ = "-`^#"π    IF INSTR(QWK.Status, InCase$) THENπ      PRINT "YES"π    ELSEπ      PRINT "NO"π    END IFπ    PRINT "Subj: "; QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT , "  Conf: "; "("; Conference$; ")"π    PRINT STRING$(80, "-");π  END IFππEND SUBππJustin McCall                  CREATE WORD SEARCH PUZZLES     www.earthlink.net              08-22-95 (17:09)       QB, QBasic, PDS        144  9548     PUZZLE.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"WPUZZLE.ZIP",4^6:Z&=6895:?STRING$(50,177);πU"%up()%9%%%#-%^X7;DNo1=DV5R%%H#%%%0%.%%&u1z))q%jSgfaxfBTb=Tko9R'πU"m4=8N9oN.kYsjITYfSTGDX.7kEMnxsl+7uH361Gb-n5[^MzMOL';tP7f\L',;PVπU"qn,B3^+G>HC+y2KPi)baX$[$EEk^6d]hl-V*EL8>RWY^rqEeWXY6R\[$*j#*8hbπU"N)Red.K'aCFsCuq\o=JNTB>wNnR8vHvM2>mW,JZtl#5lls/H_mq'U6MOr^w1\^bπU"n16[tXue?tlZICgy1?m^N>HSS=:YC5kH$Cg)O9TPlN>;UnUW^e\.Tmw+/p/y1i=πU"-c;XF:<'\ta:sBh(_g89%u1v.+JEP3^C%P9:/cf4+l)vS:MUsy7*tKrAs6mIeTaπU"9g/XdnJS9JVG5,8Fb?uYGG3OZC21f_[B((bEEKBI3#I:/>RBjaG(Y>qR,SrgJ?%πU"o5_z/%I[bbmFh*k1c$*Revev[.kpb?7%F<kmI\l:^vRbU^JLHTX+>Mo$rT:hT6,πU"I)EkX,T5]dnVPuPmFsvNy=]b5fNm[IXfU8y.^/LicPl:9z';oI&:2z7t$D4:Ld/πU"M\Tej4vl.kcF/Z2pVz):?)11%Twzck2R;I3:f/hHp_HtDThsI=Sn:^Z<$elORJnπU"hTV'9p[n042o?#cYGxW=gd<l7%M%Ih_vJcaDR54Kp*0A<&&k>aK#?3iCQbc:/^bπU"F+X**HIS<1X:(^<m:bYW_,%FV+r0)634].?pG95g=NEi)wbr]1gQcwGNd+TY=x4πU")vfu<_fi;heRrICpPB/C5G1DgAqxiB1_)5mulj=M4/%#11[i/k9M_'')GudP7]BπU"K=e9c/^zvrfL.x,GG_I&p,2t0yT7,SEl(Fmc>poRM%9+FIkDO9ocT9YDtWY2LcbπU"ofZHM9hl/97OxAbaxn[,sRK#>]ed(;S5ZEeZ/kAPJVwb2X4Zuoi%?[.>:Ym)Ca2πU"-lY?bO?9#6575o,U8J6Q4E0#u*_Y])LZR7QH+:x1s\1sW/l;mfd-v2F3gX[H+w%πU"Z=/XkPxCdW'%4J9WE6rUe%G<t0'[E38MFPcFX'89?eu%F$S=uAGNBn?DUJ-Hn:/πU"=<<4$2UspYDt4<'EWQPg9WWQ\v69M;*-:O9T(4mRzFeouNe.0>Z]2IWL86C3/ZdπU"7m94XN.3oSS0glK;'Iq'2RGlQl:xHMPRO4KfmyCca2-]XF[W6KZW%BiAcUE-0'qπU"[J+s2D*,(iEQ9H1(m/I^vyqmMQEtJ2ixdEi'<R,6]o*lr=7u5=:G(TYN/5NUV7UπU"%E?rE8eH4tkdXJR\UI/Q&f;5.(9:^S'oRpvmYQO.)g2fC-r&+lTc(A#P6Y8hm/HπU"e::G/tie#[A^jvp<t5ZIv'<Q?2/o2fRH;uJZ+&lnhyFat7FcSAQ$gvakDp-aGEKπU")g=VmmR*6RcWfT/p&YVogdwG_/BfgIuph$aw?3D$X1j9Ive\I>PWR%)ayzO_4/jπU".5[^1Vei3-be:$7CV,5?&'<*'m'Ss(dBqdqe8FpuMMXP9>oF<7R.ErO4BY5yz#yπU"bvP=MXvW\Ur6)?2&?C_96l5h]P(^1tkB/.#1HiQwYpT%N</N_+]7aF7uz8;jc/'πU"hJG[;Q%E<:Y=DeFXIoQ7]MyIE.HhLbE2)w]?_-t(AvPIv8>#5Lt%C9%tSSuftnsπU"dh+ae\1F.tLor8Msk+j9\:?u_M*E0M%5=&62>_IBUp3:cs.qN%i&sYw>hl7beKNπU"r&&co8KZx/ifJdOpqDWZH#Bf1Q&P=Q+2?V.0<41^0&B,8siB;#-g->-Lu%cSdI%πU"*YYO+J&oFj)(7gLwC<kT3Ie;*W):9$3DYkQeFTZ)f84rNWXU1oI3wCI0ASF&=nUπU"XYr;B?b,HWa.;Wq%4JkaHpup\lM9?t]r\1C?$ERt/H_I=FEg\C.p1&FC4PU1Um$πU">O'wlg<+bM\Ha(<HBMB]k=\_LGU:J=3YbJ#((8(e#kc)66(:#/qAL2JdH4l6(JVπU"3B#\h8-k\QXg*ig,D?[A:M>s\m+rH(H2SfjwKLs\??NRhRf6:aA0S,d=sHk2Rh^πU",Vh:Gb=swkqD[5bS*fj.)iArSTpP,'EvBw3N%>c?<Cc<blg.qL?gJ_<Y%$ye5<aπU";%p:t04%&NK^(O'lC.W707v6mC[oEfII-UT=B,EFg;)S$WDQtj7'B-zR3;X[uTLπU"G-4bS3;ZmykQL4G5_6-o.-T)4S(R%glkULO)[&p/UWO](:16**<*h,>f\/YUWU,πU"d*h>h#X*h>*iB*h>>j0/YUW]]VQp0HIt>JI,jp:1-6F,/tUW_XIO=IjA.M=I,j8πU"xU9m[xsu:ITuLb\O?WqQvHV'^UHq3M3xYF?r+_NIpWFy%H-[OapDhu0R_G2h,?2πU"R)Db)#VX<oU1#lkviY[>A3SUqZ+vb%=RKyjw[dQjUdKciG5oV_:pY^u<ItYIsWSπU"([p+$.]4*$GKIh>htWJIxcBC'PVTD9W6;SK3Tn-5ymGrpeink'D$hFmEI7;g1RRπU"7[1>5/u.%n,)M6^f*a=cC$N2'gZ5&I7tPlCLAu1#TvJ06C[l'/Eh)CH?hc0)_6CπU"6bs]\gJ$i\arQr9e=kZiCSS?#H))Q/,4\Dc?G4w2^FL_oSoAwkaWkd\'i42\VMJπU";>7,gby*1n-E+greMW#XY;%6rBnd>3SF%b?-po(NR+UM)l46x*?7B&nEvW-/ZsZπU"f6[<ts%R\^iMABD^Pwz^E^9eCex4'Fb/?fF08JR2Tu'ouXfV6unp&D7d&U3CqvMπU"].ZMH.CAbFXj'e7^1FZ$Jc&,zKIphp8VAqKGOq<eu)aW%l,7ce?eu256>gu>0S3πU"Gj;%Ivc6P$DGO>E,VpG3/pr/p?>\<FG4.$?jmc7\H?03j1\<hVlob<VG\VE82l\πU"F\J>>O\JGbp,95:.ZWl>523?0?BP1v$B5IT[f=y=2mP361P,L6MuyDg]xDi&=8aπU"&8Ihc1xiYP)cc=8f(S>S&WN&Ea<4J.;Ih(qigPT-e/bbknMR7H6biD1XJ+(/i]MπU"*,%2iePuYiE%$$kjSa,Ad+b(GgAe\)tc[p,4cJQC=r\A+dB[#,5fS4qDQ=vkTFaπU".$q(W&Z4=Ejm-aVfk]]h)-7]a?_Zm[d,4c1QC?v\Ab6A[4,5f14tF;^';rmY_7WπU"t7FE15/eXloWa%SK;bPD95h3Ah2=0=]UE;r2A]\rdy#aU13VN;-Q*\'G3DTO:]#πU"Q68s*&WjtB<'(3'/B0R=K053Cm0>4;E<C0lNDL1NIN,tq8JYH<eyL1n#IwBWKNfπU"sIpI%\Ng#t-[:cY+D+nulV#'m9QCMTeq4E(+5LL^\S;fKNZ2Z?\m;GDo+;6:rA(πU"bLuIjUXo>==k'DJ&ARv$tYwlp^QC/.:J$[1^<*pSJGLuHRNE$61>X4H-=(h%]r,πU"s17X&^Bj8R#BO#=DX?UktT/-riLeMyv3(wlk:hKrSag8SI>nabP_yvXe:E(wbjfπU"pIrd(jMco/,Bkoh0mnfk,YufER_nt&]kb7/Q22KqR(Tbtp'm[m)<CAXLIKJTZ'RπU"Pk._&)4p)7GW)z/Wa\uz6ljVt()^SFVr15OLA%rbFDgrblfX$Xl'hVt5#qmsrO3πU"Gd:ag<gO6Ko_[gx]](iSYN&35,>DW_;T,ssye[l06/3C/2jmBn+Op=;%)7HnS_JπU"b[e=XEJV2Q)*CR4.Val2c^;gHMQ5%cpJWoW>d5Oi6d0>O8[o,p6YP?.c#%vH?[yπU"6GUuLF]^TSSc&9d1X$xq?/5*(kbZ4#\iwT(&G6%js9N_D_di/%M0K?Ivi)qegJ&πU"IxoCfueb&ZKC7q4j5M%%daV3C1GkYRu^1M_bsC7[ZrIPKZhK%gH4:Fz/k3I8feRπU"ZZmMq=%C0<N\<h;ULBZtSN('U3W<grU::4%f6yG?U/c,kn%BFGQer_<Jk7Eu7/qπU"l^&a-C&$:AuIbg&6B6#P8XQA42A7=X.FLxc-qP%er%U5EuGPx.^r40m_MpaL2%OπU"m1UrZl*f0%LNd3i$7Zb$ur05$Zd0uLpKNXUigt/j'>Pft:Ivb+q3S)NVuxQ:uqgπU"b_=JHq2^3F5u/Lfn2lqSvskv3=($zoskMWPIK(_7N+>WjTe&kEJ8bVosU_TFFoOπU"8n7\2#IX]ZS5O?KJA[pqcr21()r574l(qDP(r55r:c2\jIFd-Z5IAgo1pf-BH<CπU"ob5ua[%\wM=0UZp=0kgwW.d*jMkwJZie?\MLp*n1%+4$>BmE\D9pd3xR<1ZNSm4πU"'KlqpJ+3pFXruV<H<rj3qvK=:FDlx8>cD-MtFts\UjfDDC_lbrv<5x1T#JDvVD\πU"LWu0M'HZdkV<de^*szK_ArrM7FX_Q4pmR%^_wB-H$s>1(IXPa0YM1PCA-R0nw^qπU"I+>.pFYn41-JWrT^0Z3AY$(;vIkMlHJdMbrSJRut6go4,%*>nvu%EQ.D(ggOiLzπU"t0x15DdkI:j#sg2so?8q]Q5Quv_tNG6p'GZwVb(t6vj,(O&xgz$RK2L6tu&?S5iπU"PWjAFZt?EU$syA4:KCNiko#msadNxRH3whj&\84#]w:/5o=n<1MBU:j2\fkuefbπU"/A#t<SFW-?RBGTqM-EK#geJ^ozw,C:S^q&,<PW*%Bh,5a(^ga61K*jknO4nGhq1πU"F8auEMsnt%LdPnhb+X?ltRo(EBiSkOs8lgsZjSmKUmP*RG\[gG826V,126TC6AHπU"-CmAHp/#o=IngGSbBMt5ubKCkfCs1_(cqfdp\I.cLX9RuZtL;b.VJj[OAM,DK8>πU"co'DFS4&pI,xYe;QXFpTh'X5NBE.M;yA:1W,N(0RSPre<X;cqj0,0R>[tj;0B)>πU"[[MqR7-DB4i%$^[=-O?loo)d\K,F&/,;A<=^#A+?kU5P*LFF/;0ADg#Tk,_U<uPπU"2F_N/owlYPNX6dnBFn=n<o/>dr2=.[4=)EI>b0[*P(2-JG9SxK*2ceC-s<CrfTIπU"c8-x&zIy*mmCu:5vH7vd%z7O-cmpD%q'oyS,2RqjO9NqQD:?LUIu^0]_*Pa7+X'πU"lHWW=te_re4/_w8ZKNy\V&o#v,C2i1jC0a3jWJKQ[:tWFj9EoAW2.'M-oB'Cl<;πU"^0cdK0^Br;2+i&gQaKp0^B;Y2+ig%QaK0##r;aEWecS5+Z^ra:wUF%-?-8VTtlSπU"\gYFgR,zOj..Iv%9S0$-5'S;h8+8tl-<uQJWRRwwFxCwaObS.hN755.5h75kV.hπU"75gK.h7J5+.hK7Sc.hlP5GM-lP5=-(Ges8.(GP/VR'p<v(GY/V<'>]EhP#wGFa'πU"6U2WOT\>IaRE/rcEb>w'6F[BRTqkPAKG'h/x55n.&V\M=1x6IRqBvopf,sE1_tMπU"52Z95eZ&f>qV)t)H<-sC3TOg-S32G\dJ-kNpg)Nyjsc8MQR^zG)$DJpW_(u&xIJπU"A\putHiBpWM8<=49i(=Tq0;jqGOuduoTwFMRjGVEhlc9puu<%up()%9%%%[-%a1πU"7:Dfa4XaM,%%%IT%%%.%%%%xj%yzuS[gfx^h)*>T.[9M\HYxewqHWJ-78JD<5pfπU"/$mo#E.sbTbf/t5)ROZc(lG1(nNLzn)oaeX+em,1QhR>jVG\]S9fEe48YpKq7l,πU"$[^apan;>,7g]8Aq\#r*bG_LBM_Fc$V[<F??brx[W]_/b)Fk,CVl56gc6W#lL^cπU"5;/&Q_fS*P0rR]WrAz\CHC=is6/[tJcW4Gn9HeUDl=bOA>dX$nEgSe3)CEF=U>_πU"qw3RbF<$68oR8SA;xkU*zFEQ5SG&0Z]u0)VjY#f%pjp9B,ScLF,j[qvr:KpF[>MπU"J<WjnUte%>CdGp5f4tnOgC(GT'V,RVZKRD(qxd:%ZEMchp<+&uU2ppDjRe5g+>/πU"]Pn<[eQP_n<3?VvvlPldzerR*9wm#fP;V(-E?Z\0HnC*U3/?q,O-07%USX?<ILcπU"lwWiVFj0SEtP9+\?1b=G?_,mR?h8IRC/(WXFj4]U=GQ_'bK/G[TEXp-K,J1<fE;πU"EDU-'ohwZTtQ4#-?ulDc+]_E2=rY+(/59(8'kU892$tJYNBb7.R'Om^cZP4[dA/πU"\#ROHk_kLtMA-[CZ#$V6SX^PmE^]TtR+K][q-G=*iwS2pEc$3_mP=fm;JEtNdb0πU"FmOZ9Y$VD$M0KvgeU;Qn,1)z-\uV]F(WURSQIE.GMH9TC.k^,4ZIZ.)gq6eLijdπU"fj+:($Rqm&?D=]F;c0S:LurIV)i2YV:z.u>OO;+P>AAc1Kv%gYvX)]p]eWU-(30πU"_JEk>#--P6f;&SbHNO,MnFz<9,6pA5>Lp(%+[L#?tP]fsWjZFXhwx,:grNcQ1G>πU"Lt13-KVHKv)m8=\am(u?C=CS*xXq_JE55&ps'q_3<EiRl#p_7jpQ]m^a&dz]9_=πU"fUIIW+i6]a-1-GdG?jp(0[Q8;il)Wcsc81f^9r7eata9VC,C8*]$KD\i+qhZ^exπU"5/x7YZG]OW/=*B[m6?N[O-Ci[MKbh>k9$j%\KxLX3M\VQp3b_?cND#oflrI'(N,πU"*jZf6[5-1fyHHK6ikrO7qY\T]29']B*aP()Knu3h6BHgPGoX5GRI^m&UXKB/R*tπU"J&R;^=[Gg,*Q]ps>pTP6>F25N']G5ue5iA3jsHNeDf%U)T8Xp7=6AM7*V/]^\34πU"Ri,6Rj$*O;2GCE:58;bFRXk-I,&RkTWQl(q/)Y)pwK(yCK*Fa3;==2KA)cfwV]jπU"ji$kS<I$Vdf''%Ia3ae>xY?hQ/C\j')ssMnJ>zhy7+B^dDT6ZFO&*]/4(x>2rIvπU"5\w\aYN0SQhXP?aiG?1UVjY*2M^]&fuh/[UIh]C8%'<KD-;*tH91Ut5_]l?:PTRπU"V?-eN-S0EcO#$QzT6ZnSx'[[X+oocUYm-Rmh]Nm9PcTs3Yu7yZ>7?BfO:OnJA^AπU"N6Xm\*t<fJ2T5Cn/T_i>k6J:r0tJSMBRpN[r6OR,D,q;R>jXBN;J*$B9e)U1OPXπU"-.qzQ[1G7z7;'W9wFJaEQ&]Of<(6Cz.MIWov+oIl)ALz'yT\mKdUNA:wCA\9V.HπU"z]l/Y(aO7lI>FLnd2ai[os>Cvh>CauKeHtDuQC?7HkBa0J&nkT7>%_Fm+Zmus;hπU"(<KLhnG8YtI%D=4X-WG8[f&dp9WG1*?ZiLiE5fFbI3YPnCEGZP=13I%0gbKh#h+πU"b7R%djTm:*;paFWgX2?aa'\(vI5.$*5jC3pm=1h^6Z[+[hXp6o$L/)(*fTpxaN1πU"uA/p#=.+[qSws9%KU?1.=21*eQ:M+WNE\ybpPPK1%5X+eOZ5.F+9*5Bg(dw2Z/LπU"NoL%15FA'>Ht8js8[z1veZUDWo&)VmIU%EaxF#5,B-rXz1W,,i0sR?E&LOU9tBoπU"TOU_*_1_hPapUi7m39EoVnU/0whM*PH+G=u'kqgio+\K.6PA)T6F'Z^s'R(-cZlπU"#<6M:&]CGu0OALiGo%^aq)418ua9*1>VaAjtr3a9lj1VaT962Vca9V2>Va9v#N:πU"B,=jJJvR5B)CE^4pt3c_Y9;'DCjF/%Zt.G*x3AhmfY)r]mf/i(Y9N*OxeUC?Pb%πU"p4MzBKwkq+ac/;.Ia90^;sac%/;Ib&9/;I(e0QiC:^iE'MvOUCI_wxJeM+r)sz9πU"m(7)Gn+mZzKLo37'u;CI)MQdp0[&Ph<KszUUE^z1\(iX93*D&NAbe(w1/id$M>$πU";Na/YiX9-'_xI1os?Z'(GvG2TzH:&X7NAbu$w1oq,CiNeX,IhkBI*GS$^nQHHf]πU"$;Hs*Yzi5YG,/CsK#PT>mC^:'bCC3DTpfY$^#Nl',EjTDQVFe;,Lk##*h^7V:T+πU"#T;Ng-OYJ?K-58Q?r%n4,'r.Y/?'S,',-PWzM,-(bQh.reu3rcz9%bC2;QGJ#G'πU"P'[\7?c9j&<W?TeWrkB1NO=Ec8d?=[>TAQmD<Ra-hbyRKfCcS74oB,jJaRKonfBπU"t/oyMuG1(q5pTq<\/h-8[PS8Qo8bBbvk\q_t%dup(%)/%%[%%%Y\Y;D5(u(h-%%πU"%%-%%%%0#%%%&Iuz))%qjSh%klUQ%\QZU%2/up%()9%%%%-%($Y;Df.wBR%m&%%πU"%-'%%%0%%%A&uz)&)qjS#ithDk$D:\mU5?h++x4D:^fIwh)7>RdI9f7h7E(A2<1πU"\H^v(8mqWjwn(BJ0pm4:3bPJu5StnHX$fP:-wG;04:%A^KLm&<llE3yPLNv<,QAπU"-g<h1,Y[h2cLsC>(IL#M2_7_Mg1:##MDDm3L+2R1,ksEEJ$fDoN^HAYe:hhf<yrπU"2l,rLLoEyX9.sgn)=S-7=X[Ss:3*8emUw1D7H>)o&Lw&RtU1%Wx22o_l5m:40kfπU"$.i%29Xm4k]C5-fUNg%L69sXUML-CXxI<3SlcrkH7UtL4sE4nf7E]'[=JKTNoR*πU"^z<)cQx_Ta.NyS1j&Jt04V%j]M\[JgbqwJb>wX6,oHY_*?par1Kv.3[Wk^8?O$GπU"D.Uw%P2o4Ihd?csu/A:o>jJMAM#o]u1'SmMRr$l-Hgj;3YDYZdDj-3s)u%p&'9%πU"%9%%%%-%^\X;DNIo=DV[5%%H&#%%0%%%%%%%%%&%%E%%%%%%%(%&uz)))qj%SgfπU"x%up&'%9%9%%%%-%+a1:D]faXa&M,%%%IT%%%.%%%%%%%%%&%E%7%%)5%%%xj%yπU"zuS%gfxu%p&'9%%/%%[%%%Y\Y;D5(u(h-%%%%-%%%%0%%%%%%%%%&%%E%%%%z=%πU"(%&uz)))qj%Shkl%up&'%9%9%%%%-%($Y;Df.wBR%m&%%%-'%%%0%%%%%%%%%&%πU"E%.%%U=.%%&u1z))q%jSit%hup*%+%%%%%)%)+%[%%+%p>%%%%%πEND SUBπCLOSE:IF S=122AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπJustin Pasher                  DUMP OUTBOUND.HIS TO TEXT FILE FidoNet QUIK_BAS Echo          02-07-96 (16:11)       QB, PDS                292  9748     FDHIS.BAS   '-> I'm kinda new to this echo, so hopefully someone will have anπ'-> answer.  Does anyone have the format for FrontDoor 2.20'sπ'-> outbound.his history file?  If so please post it for me.ππ' Try this code out. It works fine for my FD 2.02. I believe the formatsπ'stayed the same. Enjoy! You must load QB.LIB on the command line.ππDECLARE FUNCTION Cvt2Str$ (Value!)πDECLARE FUNCTION DayOfYear! (Month AS INTEGER, Day AS INTEGER, Year AS INTEGER)πDECLARE FUNCTION CurrDay! ()πDECLARE FUNCTION FindFirst! (FileSpec$)πDECLARE FUNCTION FindNext! ()πDECLARE FUNCTION LeapYear! (Year AS INTEGER)πDECLARE FUNCTION Pad$ (tString AS STRING, Spaces AS INTEGER)πDECLARE SUB Check ()πDECLARE SUB GetFileNames ()πDECLARE SUB Header ()π' History Converter v1.1π' Converted from Pascal by Justin Pasherπ'π' Converts the FrontDoor history files to a textfile.π'π'   The first record in the .HIS files is not a valid history entry. Itπ'   contains the date/time when the .HIS file was last packed or whenπ'   it was created if it has never been packed. So if you're readingπ'   the .HIS files for any reason, skip the first record and you'll beπ'   at the first valid record.ππ'$INCLUDE: 'QB.BI'πDIM SHARED Regs AS RegTypeπDIM SHARED RegsX AS RegTypeXπCONST Revision = "1.0"  ' version numberπCONST False = 0πCONST True = NOT FalseπCOMMON SHARED FDenv$, Quantity, NumFiles, Head, NoCallersπON ERROR GOTO 1000ππ' ****** Pascal structureπ'    Year,                     { 1990-xxxx }π'    Month,                    { 1-12 }π'    Day,                      { 1-31 }π'    Hour,                     { 0-23 }π'    Minute,                   { 0-59 }π'    Second,                   { 0-59 }π'    Zone,                     { Zone Number }π'    Net,                      { Net Number  }π'    Node,                     { Node Number }π'    Point     : WORD;π'    SystemName: STRING[30];π'    Location  : STRING[38];π'    TimeOnLine: WORD;         { Seconds spent on-line }π'    RcvdBytes,π'    SentBytes : LONGINT;π'    Cost      : WORD;ππTYPE MailHistTypeπ    Year AS INTEGER           ' 1990-xxxxπ    Month AS INTEGER          ' 1-12π    Day AS INTEGER            ' 1-31π    Hour AS INTEGER           ' 0-23π    Minute AS INTEGER         ' 0-59π    Second AS INTEGER         ' 0-59π    Zone AS INTEGER           ' Zone Numberπ    Net AS INTEGER            ' Net Numberπ    Node AS INTEGER           ' Node Numberπ    PointNum AS INTEGER       ' Point (if applicable)π    SNameLen AS STRING * 1π    SystemName AS STRING * 30 ' System Nameπ    LocLen AS STRING * 1π    Location AS STRING * 38   ' Locationπ    TimeOnline AS INTEGER     ' Seconds spent on-lineπ    RcvdBytes AS LONGπ    SentBytes AS LONGπ    Cost AS INTEGERπEND TYPEπDIM SHARED MailHist AS MailHistTypeππTYPE SearchTypeπ    DosJunk      AS STRING * 21π    Attr         AS STRING * 1π    Time         AS INTEGERπ    Date         AS INTEGERπ    Size         AS LONGπ    FileName     AS STRING * 13πEND TYPEπDIM SHARED Search AS SearchTypeππDIM SHARED His(1 TO 25) AS STRING * 12ππ  CLSπ  RegsX.AX = &H1A00π  RegsX.DS = VARSEG(Search)    'Set DTA Buffer for FindFirst & FindNextπ  RegsX.DX = VARPTR(Search)π  CALL InterruptX(&H21, RegsX, RegsX)π  PRINTπ  PRINT "  FrontDoor History convertor (revision "; Revision; ")."π  PRINT "  A stupid program from and copyrighted by :"π  PRINT "           Gé Janssen, 2:284/134@Fido and Helmut Kicken, 2:284/701@Fido"π  PRINT : PRINT "  Converted to QB by Justin Pasher": PRINTππ  '******** Get FD directoryπ  Path$ = ENVIRON$("FD")π  IF Path$ <> "" THENπ    Path$ = UCASE$(Path$)π    IF RIGHT$(Path$, 1) = "\" THEN FDenv$ = Path$ ELSE FDenv$ = Path$ + "\"π  ELSEπ    PRINT "  No FD environment setting found."π    PRINT "  Example:  C:\FD>SET FD=C:\FD"π    SYSTEMπ  END IFπ  NoCallers = Trueπ  GetFileNamesπ  OPEN FDenv$ + "HISTORY.TXT" FOR OUTPUT AS #2π  FOR NumFiles = 1 TO Quantityπ    OPEN FDenv$ + His(NumFiles) FOR RANDOM AS #1 LEN = LEN(MailHist)π    Checkπ    IF Head = True THEN PRINT #2, ""π    CLOSE #1π    Head = Falseπ  NEXTπ  IF NoCallers = True THEN PRINT "  There was no activity today."π  CLOSE #2π  PRINT "  "; FDenv$; "HISTORY.TXT is now complete!"π  SYSTEMππ1000 IF ERR = 6 THEN RESUME NEXTππSUB Checkπ  DIM SendTot AS LONG    ' total send bytesπ  DIM RcvdTot AS LONG    ' total received bytesπ  DIM TimeTot AS LONG    ' total connect timeπ  Empty = True           ' if no calls (true) then write no callersπ  GET #1, , MailHist     ' dummy readπ  IF LOF(1) = 102 THEN EXIT SUBπ  DOπ    Text$ = ""π    GET #1, , MailHistπ    IF NOT Head THENπ Headerπ Head = Trueπ Foot = Trueπ NoCallers = Falseπ    END IFπ    Empty = Falseπ    IF MailHist.Hour < 10 THEN Text$ = "0"π    Text$ = Text$ + LTRIM$(STR$(MailHist.Hour)) + ":"π    IF MailHist.Minute < 10 THEN Text$ = Text$ + "0"π    SysName$ = LEFT$(MailHist.SystemName, ASC(MailHist.SNameLen))π    Text$ = Text$ + LTRIM$(STR$(MailHist.Minute)) + " " + SysName$π    FOR A = LEN(RTRIM$(SysName$)) TO 29π Text$ = Text$ + " "π    NEXTπ    IF MailHist.SentBytes = 0 THENπ Text$ = Text$ + "N/A       "π    ELSEπ Text$ = Text$ + Pad$(LTRIM$(STR$(MailHist.SentBytes)), 10)π    END IFπ    SendTot = SendTot + MailHist.SentBytesπ    IF MailHist.RcvdBytes = 0 THENπ Text$ = Text$ + "N/A        "π    ELSEπ Text$ = Text$ + Pad$(LTRIM$(STR$(MailHist.RcvdBytes)), 11)π    END IFπ    RcvdTot = RcvdTot + MailHist.RcvdBytesπ    Minutes = MailHist.TimeOnline \ 60π    Seconds = MailHist.TimeOnline MOD 60π    TimeTot = TimeTot + MailHist.TimeOnlineπ    IF Minutes < 10 THEN Text$ = Text$ + "0"π    Text$ = Text$ + Cvt2Str$(Minutes) + ":"π    IF Seconds < 10 THEN Text$ = Text$ + "0"π    Text$ = Text$ + Cvt2Str$(Seconds) + "   (" + LTRIM$(STR$(MailHist.Zone)) + ":" + LTRIM$(STR$(MailHist.Net)) + "/" + LTRIM$(STR$(MailHist.Node))π    IF MailHist.PointNum <> 0 THENπ Text$ = Text$ + "." + LTRIM$(STR$(MailHist.PointNum))π    END IFπ    Text$ = Text$ + ")"π    PRINT #2, Text$π  LOOP UNTIL EOF(1)π  IF Empty = False THENπ    PRINT #2, "────────────────────────────────────────────────────────────────────────────"π    PRINT #2, "Totals bytes sent: "; Pad$(LTRIM$(STR$(SendTot)), 36); "Total bytes received: "; Pad$(LTRIM$(STR$(RcvdTot)), 9)π    Hours = TimeTot \ 3600π    Minutes = TimeTot MOD 3600 \ 60π    Seconds = TimeTot MOD 3600 MOD 60π    Text$ = "Total Time: "π    Text$ = Text$ + Cvt2Str$(Hours) + ":"π    IF Hours < 10 THEN Text$ = " 0" + Text$π    IF Minutes < 10 THEN Text$ = Text$ + "0"π    Text$ = Text$ + Cvt2Str$(Minutes) + ":" + Cvt2Str$(Seconds)π    PRINT #2, Text$π    PRINT #2, ""π    PRINT #2, ""π  END IFπEND SUBππFUNCTION CurrDay!π  DIM Month AS INTEGERπ  DIM Day AS INTEGERπ  DIM Year AS INTEGERπ  Month = VAL(LEFT$(DATE$, 2))π  Day = VAL(MID$(DATE$, 4, 2))π  Year = VAL(RIGHT$(DATE$, 4))π  A = DayOfYear(Month, Day, Year) - 1π  IF A = 0 THENπ    IF LeapYear(Year - 1) THEN CurrDay! = 366 ELSE CurrDay! = 365π  ELSEπ    CurrDay! = Aπ  END IFπEND FUNCTIONππFUNCTION Cvt2Str$ (Value)π  Cvt2Str$ = LTRIM$(STR$(Value))πEND FUNCTIONππFUNCTION DayOfYear (Month AS INTEGER, Day AS INTEGER, Year AS INTEGER)π  IF LeapYear(Year) THEN N = 1 ELSE N = 2π  N = 275 * Month \ 9 - N * ((Month + 9) \ 12) + INT(Day) - 30π  DayOfYear = NπEND FUNCTIONππFUNCTION FindFirst (FileSpec$)π  Spec$ = FileSpec$ + CHR$(0)π  DIM DateTime(6)π  RegsX.AX = &H4E00π  RegsX.CX = Attrπ  RegsX.DS = VARSEG(Spec$)π  RegsX.DX = SADD(Spec$)π  CALL InterruptX(&H21, RegsX, RegsX)π  Ecode = RegsX.AXπ  IF Ecode GOTO NoMoreπ  F$ = Search.FileNameπ  Null = INSTR(F$, CHR$(0))π  IF Null THEN Search.FileName = LEFT$(F$, Null - 1)πNoMore:π  IF Ecode = 2 OR Ecode = 18 THEN FindFirst = False ELSE FindFirst = TrueπEND FUNCTIONππFUNCTION FindNextπ  DIM DateTime(6)π  RegsX.AX = &H4F00π  CALL InterruptX(&H21, RegsX, RegsX)π  Ecode = RegsX.AXπ  IF Ecode GOTO NoMore2π  F$ = Search.FileNameπ  Null = INSTR(F$, CHR$(0))π  IF Null THEN FileName$ = LEFT$(FileName$, Null - 1)πNoMore2:π  IF Ecode = 2 OR Ecode = 18 THEN FindNext = False ELSE FindNext = TrueπEND FUNCTIONππSUB GetFileNamesπ  RC = FindFirst(FDenv$ + "*.HIS")π  IF RC = False THEN PRINT "No *.HIS file(s) not found": EXIT SUBπ  Quantity = 1π  DOπ    FileName$ = UCASE$(RTRIM$(Search.FileName))π    His(Quantity) = FileName$π    IF ASC(RIGHT$(His(Quantity), 1)) = 0 THEN His(Quantity) = LEFT$(His(Quantity), LEN(His(Quantity)) - 1)π    Quantity = Quantity + 1π    RC = FindNextπ  LOOP UNTIL RC = False OR Quantity = 25π  Quantity = Quantity - 1πEND SUBππSUB Headerπ  Month = VAL(LEFT$(DATE$, 2))π  Day = VAL(MID$(DATE$, 4, 2))π  Year = VAL(RIGHT$(DATE$, 4))π  IF LEFT$(His(NumFiles), 1) = "I" THENπ    PRINT #2, "Inbound Mail/Fax/BBS callers history "π  ELSEπ    PRINT #2, "Outbound Mail/Fax/BBS callers history "π  END IFπ  Text$ = "(" + RTRIM$(His(NumFiles)) + ") from "π  IF Month < 10 THEN Text$ = Text$ + "0"π  Text$ = Text$ + Cvt2Str$(Month) + "-"π  IF Day < 10 THEN Text$ = Text$ + "0"π  Text$ = Text$ + Cvt2Str$(Day) + "-" + Cvt2Str$(Year) + "."π  PRINT #2, Text$π  PRINT #2, ""π  PRINT #2, "Time  System Sent                   Sent      Rcvd      Duration Node Number"π  PRINT #2, STRING$(79, "─")π  PRINT "  Reading "; FDenv$; His(NumFiles)πEND SUBππFUNCTION LeapYear (Year AS INTEGER)π  IF ((Year MOD 100) <> 0) AND ((Year MOD 4) = 0) THEN LeapYear = True ELSE LeapYear = FalseπEND FUNCTIONππFUNCTION Pad$ (tString AS STRING, Spaces AS INTEGER)π  IF LEN(tString) > Spaces THEN Pad = LEFT$(tString, Spaces): EXIT FUNCTIONπ  Pad = tString + STRING$(Spaces - LEN(tString), " ")πEND FUNCTIONπDouglas H. Lusher              LED CLOCK DISPLAY              FidoNet QUIK_BAS Echo          03-23-96 (15:23)       QB, QBasic, PDS        200  5604     LED.BAS      DECLARE SUB ClrRowCtrMsg (Message$)π DECLARE SUB LED1 (Spec$)π DECLARE SUB LED2 (Spec$)π DEFINT A-Zππ 'GOTO Clockππ SCREEN 0, 1, 0: COLOR 7, 1: CLSπ COLOR 0, 1π LOCATE 3, 6: PRINT STRING$(69, "▄")π FOR R% = 4 TO 8    'change 8 to 10 for large LEDsπ   LOCATE R%, 6: PRINT STRING$(69, "█");π NEXTππ DOπ   T$ = "  0:00:00"π   LOCATE 4, 7: COLOR 7, 0: CALL LED1(T$): COLOR 7, 1π   ClrRowCtrMsg "Press any key to begin timing..."π   X$ = INPUT$(1)π   Start! = TIMERπ   ClrRowCtrMsg "Press any key to stop timer..."π   DOπ     GOSUB ShowTimeπ     X$ = INKEY$: IF LEN(X$) THEN EXIT DOπ   LOOPπ   ClrRowCtrMsg "Press ESC to quit, any other key to reset the timer."π   X$ = INPUT$(1): IF X$ = CHR$(27) THEN EXIT DOπ LOOPπ CLSπ ENDππ ShowTime:π T! = TIMER - Start!π Mins$ = RIGHT$("  " + STR$(INT(T!) \ 60), 3)π Secs$ = RIGHT$(STR$((INT(T!) MOD 60) + 100), 2)π Frac$ = MID$(STR$(T! - INT(T!)) + "00", 3, 2)π MID$(T$, 1, 3) = Mins$: MID$(T$, 5, 2) = Secs$: MID$(T$, 8, 2) = Frac$π LOCATE 4, 7: COLOR 7, 0: CALL LED1(T$): COLOR 7, 1π RETURNππ Clock:π SCREEN 0, 1, 0: COLOR 7, 1: CLSπ COLOR 0, 1π LOCATE 3, 10: PRINT STRING$(60, "▄")π FOR R% = 4 TO 8    'change 8 to 10 for large LEDsπ   LOCATE R%, 10: PRINT STRING$(60, "█");π NEXTπ COLOR 7, 0π DO UNTIL LEN(INKEY$)π   LOCATE 4, 11: CALL LED1(TIME$)π LOOPπ CLSπ ENDππ SUB ClrRowCtrMsg (Message$)π LOCATE 12, 1: PRINT SPC(79); " ";π LOCATE , (82 - LEN(Message$)) \ 2: PRINT Message$;π END SUBππ SUB LED1 (Spec$) STATICππ IF Initialized% GOTO Begin1π Top1$ = "▄▀▀▀▀▄"π Top2$ = "▄    ▄"π Top3$ = "     ▄"π Top4$ = "▄     "π Top5$ = " ▀▀▀▀▄"π Top6$ = "▄▀▀▀▀ "π Bot1$ = " ▀▀▀▀ "π Ctr2$ = "█    █"π Ctr3$ = "     █"π Ctr4$ = "█     "π XXX1$ = "      "π Initialized% = -1ππ Begin1:π R% = CSRLIN: C% = POS(0)π FOR Ptr% = 1 TO LEN(Spec$)π  SELECT CASE ASC(MID$(Spec$, Ptr%, 1))π    CASE 48π      T$ = Top1$: C1$ = Ctr2$: M$ = Top2$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 49π      T$ = Top3$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 50π      T$ = Top5$: C1$ = Ctr3$: M$ = Top6$: C2$ = Ctr4$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 51π      T$ = Top5$: C1$ = Ctr3$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 52π      T$ = Top2$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 53π      T$ = Top6$: C1$ = Ctr4$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 54π      T$ = Top4$: C1$ = Ctr4$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 55π      T$ = Top5$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 56π      T$ = Top1$: C1$ = Ctr2$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar1: C% = C% + 9π    CASE 57π      T$ = Top1$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar1: C% = C% + 9π    CASE ASC(":")π      LOCATE R% + 1, C%: PRINT "▀";π      LOCATE R% + 3, C%: PRINT "▀";π      C% = C% + 3π    CASE 32π      T$ = XXX1$: C1$ = XXX1$: M$ = XXX1$: C2$ = XXX1$: B$ = XXX1$π      GOSUB ShowChar1: C% = C% + 8π  END SELECTπ NEXTπ EXIT SUBππ ShowChar1:π LOCATE R% + 0, C%: PRINT T$;π LOCATE R% + 1, C%: PRINT C1$;π LOCATE R% + 2, C%: PRINT M$;π LOCATE R% + 3, C%: PRINT C2$;π LOCATE R% + 4, C%: PRINT B$;π RETURNπ END SUBππ SUB LED2 (Spec$) STATICππ IF Initialized% GOTO Begin2π Top1$ = "▄▀▀▀▀▀▄"π Top2$ = "▄     ▄"π Top3$ = "      ▄"π Top4$ = "▄      "π Top5$ = " ▀▀▀▀▀▄"π Top6$ = "▄▀▀▀▀▀ "π Bot1$ = " ▀▀▀▀▀ "π Ctr2$ = "█     █"π Ctr3$ = "      █"π Ctr4$ = "█      "π XXX1$ = "       "π Initialized% = -1ππ Begin2:π R% = CSRLIN: C% = POS(0)π FOR Ptr% = 1 TO LEN(Spec$)π  SELECT CASE ASC(MID$(Spec$, Ptr%, 1))π    CASE 48π      T$ = Top1$: C1$ = Ctr2$: M$ = Top2$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 49π      T$ = Top3$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 50π      T$ = Top5$: C1$ = Ctr3$: M$ = Top6$: C2$ = Ctr4$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 51π      T$ = Top5$: C1$ = Ctr3$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 52π      T$ = Top2$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 53π      T$ = Top6$: C1$ = Ctr4$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 54π      T$ = Top4$: C1$ = Ctr4$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 55π      T$ = Top5$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 56π      T$ = Top1$: C1$ = Ctr2$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$π      GOSUB ShowChar2: C% = C% + 9π    CASE 57π      T$ = Top1$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$π      GOSUB ShowChar2: C% = C% + 9π    CASE ASC(":")π      LOCATE R% + 1, C%: PRINT "▄";π      LOCATE R% + 4, C%: PRINT "▄";π      C% = C% + 3π    CASE 32π      T$ = XXX1$: C1$ = XXX1$: M$ = XXX1$: C2$ = XXX1$: B$ = XXX1$π      GOSUB ShowChar2: C% = C% + 9π  END SELECTπ NEXTπ EXIT SUBππ ShowChar2:π LOCATE R% + 0, C%: PRINT T$;π LOCATE R% + 1, C%: PRINT C1$;π LOCATE R% + 2, C%: PRINT C1$;π LOCATE R% + 3, C%: PRINT M$;π LOCATE R% + 4, C%: PRINT C2$;π LOCATE R% + 5, C%: PRINT C2$;π LOCATE R% + 6, C%: PRINT B$;π RETURNπ END SUBπEthan Winer                    INSTALLATION UTILITY           sansbach@gpu.srv.ualberta.ca   01-29-93 (10:58)       QB, PDS                1067 39535    PC-SETUP.BAS'********** PC-SETUP.BAS - PC Magazine Install Utilityππ'Copyright (c) 1992 Ethan Winerππ'Note: If you run this program in the QB editor the ExeName function willπ'return the directory that QB.EXE was run from, which is not necessarily theπ'current directory.  In that case you may have to enter the directory nameπ'where your various .ZIP files reside for PC-SETUP to find them.π'π'If you are using Crescent's P.D.Q. you must search for all each call to theπ'Interrupt routine, and change it as shown in the accompanying comments.  Youπ'can then compile and link this program for the smallest size possible asπ'follows:π'π'   bc pc-setup /o/s;π'   link /nod/noe/packc/far/ex _π'     pc-setup _noread _noval _noerror _cprint , , nul , [basic7] pdq;π'   exe2com pc-setup               (optional)π'   del pc-setup.exe               (optional)π'   ren pc-setup.com pc-setup.exe  (optional)πππDEFINT A-Zππ'---- BASIC SUB and FUNCTION procedures in this program fileπ'πDECLARE SUB CopyFile (Source$)πDECLARE SUB DrawBox (ULRow, ULCol, LRRow, LRCol, Style)πDECLARE SUB DrawScreen ()πDECLARE SUB Editor (Text$, Row, LeftCol, Length, KeyCode)πDECLARE SUB EarlyEnd ()πDECLARE SUB ErrorEnd (Message$)πDECLARE SUB MidCharS (Work$, Position, NewChar)πDECLARE SUB ReadNames (Spec$, Array$())πDECLARE SUB SelectFiles (FileNames$(), Choice, ExitCode)πDECLARE SUB SetDrive (Drive$)πDECLARE SUB StuffBuf (Work$)ππDECLARE FUNCTION ChangeDir% (DirName$)πDECLARE FUNCTION DOSVersion% ()πDECLARE FUNCTION Execute% (FileName$, Parameter$)πDECLARE FUNCTION ExeName$ ()πDECLARE FUNCTION FileCount% (FileSpec$, DirFlag)πDECLARE FUNCTION GetComment$ (FileName$)πDECLARE FUNCTION GetDir$ ()πDECLARE FUNCTION GetDrive% ()πDECLARE FUNCTION IntVal% (Work$)πDECLARE FUNCTION MakeDir% (DirName$)πDECLARE FUNCTION MidChar% (Work$, Position)πDECLARE FUNCTION Prompt% (Which)πDECLARE FUNCTION SourceDir$ ()πππ'Define the TYPE and other shared variables needed for using CALL InterruptX.π'πTYPE RegTypeπ  AX    AS INTEGERπ  BX    AS INTEGERπ  CX    AS INTEGERπ  DX    AS INTEGERπ  BP    AS INTEGERπ  SI    AS INTEGERπ  DI    AS INTEGERπ  Flags AS INTEGERπ  DS    AS INTEGERπ  ES    AS INTEGERπEND TYPEπDIM SHARED Regs AS RegTypeππTYPE DTAType                            'used by find first/next serviceπ  Reserved  AS STRING * 21              'reserved for use by DOSπ  Attribute AS STRING * 1               'the file's attributeπ  FileTime  AS STRING * 2               'the file's timeπ  FileDate  AS STRING * 2               'the file's dateπ  FileSize  AS LONG                     'the file's sizeπ  FileName  AS STRING * 13              'the file's nameπEND TYPEπDIM SHARED DTA AS DTATypeππDIM SHARED DOS                          'so the DOS procedures can get at itπDIM SHARED ZBuffer AS STRING * 80       'holds ASCIIZ copies of DOS stringsπDIM SHARED One, Zero, Zero$             'these save code when used in CALLsπDIM SHARED Temp, Temp$                  'these are reusable scratch variablesππ'---- Define some constants and variables, and colors based on display type.π'πCONST MaxFiles% = 19                    'max. number of .ZIP files per diskπCONST DirLength% = 25                   'length of dest. directory displayππOne = 1                                 'saves four bytes per use in a CALLπDOS = &H21                              'also saves four bytes per useπZero$ = CHR$(0)                         'call CHR$() just once hereπPadComment$ = SPACE$(36)                'holds each comment when printingπREDIM DirsMade$(1 TO 100)               'remembers directories we createdππBar$ = "╠" + STRING$(78, 205) + "╣"     'for the main screen separating barsπMsg$ = SPACE$(79)                       'for messages on the bottom lineπIF INSTR(UCASE$(COMMAND$), "/B") THEN MonoFlag = -1   '/b forces mono colorsππNormFG = 11: NormBG = 7                 'assume colors for a color displayπHiFG = 11: HiBG = 4                     'menu and default directory colorsπMainFG = 10: MainBG = 1                 'main screen and box FG and BG colorsπCsrSize = 7                             'color displays use 8 scan linesππDEF SEG = 0                             'see if it's really a color displayπMonoMon = (PEEK(&H463) = &HB4)          'if not, MonoMon now equals -1πIF MonoMon OR MonoFlag THEN             'it's monochrome or /b was usedπ  NormFG = 7: NormBG = 0π  HiFG = 15: HiBG = 0π  MainFG = 0: MainBG = 7π  IF MonoMon THEN CsrSize = 12          'mono displays use 13 scan linesπEND IFππIF DOSVersion% < 300 THEN               'PC-SETUP requires DOS 3.0 or laterπ  PRINT "DOS 3.0 or later required."π  ENDπEND IFππ'---- Get the directory PC-SETUP was run from or prompt for it if needed, toπ'     ensure that there's at least one .ZIP file present to install.π'πInstPath$ = SourceDir$πDOπ  IF RIGHT$(InstPath$, 1) <> "\" THEN InstPath$ = InstPath$ + "\"π  InstSpec$ = InstPath$ + "*.ZIP"π  NumFiles = FileCount%(InstSpec$, Zero)π  IF NumFiles THEN EXIT DOπ  PRINT "No .ZIP files were found."π  INPUT "Enter the source directory or press Enter to end: ", InstPath$π  IF LEN(InstPath$) = 0 THEN ENDπLOOPππIF FileCount%(InstPath$ + "PKUNZIP.EXE", Zero) = 0 THEN 'confirm PKUNZIPπ  PRINT "Can't find PKUNZIP."                           '  is availableπ  ENDπEND IFπ     πIF MidChar%(InstPath$, 2) <> 58 THEN    'if there's no drive letter (:)π  InstPath$ = CHR$(GetDrive%) + ":" + InstPath$ 'append the current driveπEND IFπππ'---- See if they're installing more than one disk, and if so how many.π'πNumDisks = 1                                'assume only one disk for nowπNumDisksFile$ = InstPath$ + "NUMDISKS.*"    'concatenate these just onceππIF FileCount%(NumDisksFile$, Zero) THENπ  DIM NumDisks$(1 TO 1)π  CALL ReadNames(NumDisksFile$, NumDisks$())π  Temp = INSTR(NumDisks$(1), ".")π  NumDisks = IntVal%(MID$(NumDisks$(1), Temp + 1))πEND IFπππ'---- See if there's a DEFAULT.DIR file in the root directory of the firstπ'     distribution disk, and if so read its contents.  Here we're usingπ'     FileCount to merely see if the file exists.  If there's no DEFAULT.DIRπ'     file, default to current drive and directory.  And if the current driveπ'     is A or B replace that with C.π'πSaveDir$ = CHR$(GetDrive%) + ":" + GetDir$      'save this while we have itπDefaultDir$ = SaveDir$                          'now assign it as the defaultππTemp = ASC(DefaultDir$)                         'avoid using ASC() twiceπIF Temp = 65 OR Temp = 66 THEN                  'don't default to A: or B:π  CALL MidCharS(DefaultDir$, 1, 67)             'if A: or B:, substitute C:πEND IFππDefaultDirFile$ = InstPath$ + "DEFAULT.DIR"     'concatenate these just onceππIF FileCount%(DefaultDirFile$, Zero) THEN       'open the file if it existsπ  OPEN DefaultDirFile$ FOR INPUT AS #1π  INPUT #1, DefaultDir$                         'read the default directory,π  CLOSE                                         ' trim and capitalize (UCASE$π  DefaultDir$ = UCASE$(RTRIM$(LTRIM$(DefaultDir$))) ' is for cosmetics only)πEND IFπππ'---- See if there's a PROGRAM.RUN file in the root directory of the firstπ'     distribution disk, and if so read its contents.π'πRunFileName$ = InstPath$ + "PROGRAM.RUN"        'concatenate these just onceπIF FileCount%(RunFileName$, Zero) THEN          'open the file if it existsπ  OPEN RunFileName$ FOR INPUT AS #1π  INPUT #1, RunName$π  CLOSEπ  RunName$ = RunName$ + CHR$(13)                'simulate pressing Enterπ  IF LEN(RunName$) > 15 THEN RunName$ = ""      'don't use name if too longπEND IFπππ'---- This is the main installation loop that cycles through each diskette.π'πFOR Disk = 1 TO NumDisksππ  '---- See how many .ZIP files there are on the current disk, and limit theπ  '     number we'll handle to MaxFiles% if there are more than that.  Thenπ  '     draw/redraw the main screen.π  'π  NumFiles = FileCount%(InstSpec$, Zero)π  IF NumFiles > MaxFiles% THEN NumFiles = MaxFiles%π π  CALL DrawScreenπ π  '---- Read the .ZIP file names and display them in a vertical menu.  Thenπ  '     read any default directories (if present) within each .ZIP file'sπ  '     comment, and display them in the destination directory fields.  Forπ  '     each .ZIP file that doesn't have a corresponding default directoryπ  '     in the comment, use the contents of the main DEFAULT.DIR file foundπ  '     in the root directory of the disk.π  'π  REDIM ZIPName$(1 TO NumFiles)π  REDIM DestDir$(1 TO NumFiles)π  REDIM Comment$(1 TO NumFiles)ππ  CALL ReadNames(InstSpec$, ZIPName$())ππ  FOR X = 1 TO NumFiles                 'look at each .ZIP file commentπ    DestDir$(X) = SPACE$(DirLength%)    'create a string to hold the dest dirπ    LSET DestDir$(X) = DefaultDir$      'assume none, use the global defaultπ    Comment$(X) = GetComment$(InstPath$ + ZIPName$(X))π    Temp = INSTR(Comment$(X), "■")      'see if a directory was givenπ    IF Temp THEN                        'there is a directory for this fileπ      LSET DestDir$(X) = UCASE$(MID$(Comment$(X), Temp + 1)) 'dir is on rightπ      Comment$(X) = LEFT$(Comment$(X), Temp - 1)         'and comment on leftπ    END IFπ  NEXTππ  FOR X = 1 TO NumFiles                 'add leading blanks to make roomπ    ZIPName$(X) = "   " + ZIPName$(X)   '  for the CHR$(251) check marksπ    IF RIGHT$(Comment$(X), 1) = "√" THEN    'they want this file checkedπ      CALL MidCharS(ZIPName$(X), 2, 251)    'so check it in the file list boxπ      Comment$(X) = LEFT$(Comment$(X), LEN(Comment$(X)) - 1)π    END IFπ    LSET PadComment$ = Comment$(X)      'display the directories and commentsπ    COLOR NormFG, NormBG                'while we're hereπ    LOCATE X + 4, 2: PRINT DestDir$(X);π    LOCATE X + 4, 44: PRINT PadComment$;π  NEXTππ  DO                                    'let the user select the filesπ    CALL SelectFiles(ZIPName$(), Choice, ExitCode)π    IF ExitCode = 9 THEN                'they pressed Tabπ      COLOR MainFG, MainBGπ      LOCATE 25, 2π      PRINT SPC(30); "Tab: Select .ZIP files    F2: Begin    Esc: Quit";ππ      DOπ        CALL Editor(DestDir$(Choice), Choice + 4, 2, 25, ExitCode)π        SELECT CASE ExitCode            'how did the terminate editing?π          CASE -80                      'Down Arrowπ            Choice = Choice + 1         'wrap around if they go past the endπ            IF Choice > NumFiles THEN Choice = 1π          CASE -72                      'Up Arrowπ            Choice = Choice - 1         'wrap to the end if they go before 1π            IF Choice < 1 THEN Choice = NumFilesπ          CASE 27                       'Escapeπ            CALL EarlyEndπ          CASE -60                      'F2π            ExitCode = -60              'tell SelectFiles to come right backπ            EXIT DO                     '  so we can exit both levels of DOπ          CASE ELSEπ            EXIT DO                     'anything else returns to SelectFilesπ        END SELECTπ      LOOPπ    ELSEIF ExitCode = -60 THEN          'F2π      ExitCode = 0                      'prevent unwanted recursion acrossπ      EXIT DO                           '  multiple disksπ    ELSEIF ExitCode = 27 THEN           'Escapeπ      CALL EarlyEndπ    END IFπ  LOOPπππ  '---- Install the selected files to the specified destination directories.π  '     For each file that is tagged, either change to the appropriate driveπ  '     and directory, or ensure that we're back to the original path.π  'π  FOR X = 1 TO NumFiles                       'for each .ZIP file presentππ    IF MidChar%(ZIPName$(X), 2) = 251 THEN    'if it's tagged to installππ      IF X = 1 THEN RunProg = -1              'use PROGRAM.RUN only if firstπ                                              '  file is being installedπ      COLOR MainFG, MainBG                    'for the status message belowπ      CLSπ      LSET Msg$ = "Installing" + RTRIM$(MID$(ZIPName$(X), 3)) + "..."π      COLOR HiFGπ      PRINT Msg$                              'advise the user as to progressπ      COLOR MainFGπ     π      DestPath$ = RTRIM$(DestDir$(X))         'work with a copy of the pathππ      IF MidChar%(DestPath$, 2) = 58 THEN     'if a drive was used (58 = ":")π        CALL SetDrive(DestPath$)              'change to that driveπ        IF GetDrive% <> ASC(DestPath$) THEN   'no such driveπ          CALL ErrorEnd("Drive " + LEFT$(DestPath$, 2) + " invalid")π        END IFπ      ELSEπ        CALL SetDrive(DefaultDir$)            'else switch to default driveπ      END IFππ      'strip off possible trailing "\" unless it refers to the root directoryπ      IF RIGHT$(DestPath$, 1) = "\" THENπ        Temp = LEN(DestPath$)π        IF Temp > 1 AND RIGHT$(DestPath$, 2) <> ":\" THENπ          DestPath$ = LEFT$(DestPath$, Temp - 1)π        END IFπ      END IFππ      Temp = -1                               'assume directory now existsπ      IF LEN(DestPath$) THEN                  'if a directory name was givenππ        IF RIGHT$(DestPath$, 1) <> "\" THEN   'and it's not a root directoryππ          IF FileCount%(DestPath$, -1) = 0 THEN   'does the directory exist?π            IF MakeDir%(DestPath$) THEN       'no, so first try to create itπ              CALL ErrorEnd("Cannot create " + DestPath$)π            END IFπ            Temp = 0                          'it can't possibly have filesπ            DirsWeMade = DirsWeMade + 1       'show we created another oneπ            DirsMade$(DirsWeMade) = DestPath$ 'and remember its nameπ          END IFππ          FOR Y = 1 TO DirsWeMade             'see if we made this directoryπ            IF DestPath$ = DirsMade$(Y) THEN  'yes, so there's no need toπ              Temp = 0                        ' warn about overwriting filesπ              EXIT FORπ            END IFπ          NEXTππ        END IFππ        IF ChangeDir%(DestPath$) THEN         'then try to change to itπ          CALL ErrorEnd("Unable to access " + DestPath$)π        END IFππ      END IFππ      PKCmd$ = "-o "                          'assume they want to be warnedπ      IF Temp THEN                            'this directory existedπ        IF Prompt%(Zero) THEN                 'ask if they want to be warnedπ          PKCmd$ = ""                         ' to overwrite existing filesπ        END IF                                ' without further prompting andπ      END IF                                  ' use appropriate command if soππ      IF NOT PKCopied THEN                    'copy PKUNZIP first time onlyπ        PKCopied = -1                         'flag that we did it alreadyπ        CALL CopyFile(InstPath$)              'show where PKUNZIP.EXE isπ        PKDir$ = RTRIM$(DestDir$(X))          'remember where we put it!π        IF LEN(PKDir$) = 0 THEN PKDir$ = DefaultDir$ 'use default dir if noneπ       π        Temp = ASC(RIGHT$(PKDir$, 1))         'check the right-most characterπ        IF Temp <> 58 AND Temp <> 92 THEN     'if not a colon or backslashπ          PKDir2$ = "\"                       ' create a trailing "\"π        END IF                                ' which is appended belowπ      END IFππ      '---- Install all of the files contained in this .ZIP file and checkπ      '     for an errors returned by either DOS or PKUNZIP.  Execute returnsπ      '     positive error values if PKUNZIP was run okay but it returned anπ      '     error via the DOS Errorlevel.  If DOS itself reports an errorπ      '     (perhaps there wasn't enough memory to run the program) Executeπ      '     returns the DOS error value as a negative number.  Error 8 is theπ      '     DOS "Out of memory" error.π      'π      Temp = Execute%(PKDir$ + PKDir2$ + "PKUNZIP.EXE", PKCmd$ + InstPath$ + RTRIM$(MID$(ZIPName$(X), 4)))π      IF Temp THENπ        Temp$ = "PKUNZIP reports Error" + STR$(Temp)π        IF Temp < 0 THEN Temp$ = "Out of memory"π        CALL ErrorEnd(Temp$)π      END IFππ      IF INKEY$ = CHR$(27) THEN         'allow aborting by pressing Escapeπ        CALL EarlyEndπ      END IFππ    END IFππ  NEXTππ  IF Disk < NumDisks THEN               'if there are more disks to installπ    LOCATE 25, 2                        'prompt to insert the next diskπ    LSET Msg$ = "Insert the next disk and press any key when ready"π    COLOR MainFG, MainBGπ    PRINT Msg$;π    LOCATE , 52π    DO: LOOP WHILE LEN(INKEY$)          'first clear any pending keysπ    DO: LOOP UNTIL LEN(INKEY$)          'then wait for a keypressπ    CALL SetDrive(SaveDir$)             'return to the current drive and itsπ    Temp = ChangeDir%(SaveDir$)         '  current directory before going onπ  END IFππNEXT Diskπππ'---- Report success and run the specified program (StuffBuf ignores a nullπ'     string argument.π'πCOLOR 7, 0: CLSπLOCATE 13, 30: PRINT "Installation complete!"πLOCATE 22, 1, 1πCALL SetDrive(PKDir$)                   'change to the first drive andπTemp = ChangeDir%(PKDir$)               ' directory we installed toπKILL "PKUNZIP.EXE"                      'delete the copy of PKUNZIP.EXE thereπIF RunProg THEN CALL StuffBuf(RunName$) 'stuff the buffer if appropriateπEND                                     'and endππFUNCTION ChangeDir% (DirName$)          'returns 0 if Okay, -1 if an errorπ π  ZBuffer$ = DirName$ + Zero$           'make an ASCIIZ stringπ  Regs.AX = &H3B00                      'DOS change directory serviceπ  Regs.DX = VARPTR(ZBuffer$)            'show DOS where ZBuffer$ isπ  CALL Interrupt(DOS, Regs, Regs)       'call DOSπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.ππ  IF Regs.Flags AND 1 THEN              'must be an invalid pathπ    ChangeDir% = -1                     'return -1 as an errorπ  END IFππEND FUNCTIONππSUB CopyFile (Source$) STATIC           'copies PKUNZIP.EXEπ π  Temp$ = Source$ + "PKUNZIP.EXE"π π  IF FileCount%(Temp$, Zero) THENπ    OPEN Temp$ FOR BINARY AS #1         'open the input file if it existsπ  ELSE                                  'if we can't find it, bag out withπ    CALL ErrorEnd("Can't find PKUNZIP.EXE")     ' an error messageπ  END IFππ  OPEN "PKUNZIP.EXE" FOR BINARY AS #2   'now open the target fileππ  Temp$ = SPACE$(LOF(1))                'make a buffer to hold PKUNZIP.EXEπ  GET #1, , Temp$                       'read the source fileπ  PUT #2, , Temp$                       'write it to the destinationπ π  CLOSE                                 'all done hereπ   πEND SUBππFUNCTION DOSVersion% STATIC         'returns DOS version * 100 (3.30 = 330)ππ  Regs.AX = &H3000                  'DOS get DOS version serviceπ  CALL Interrupt(DOS, Regs, Regs)π 'CALL Interrupt(DOS, Regs)         'use this with P.D.Q.ππ  'combine the major version in AL and the minor in AHπ  DOSVersion% = (Regs.AX AND 255) * 100 + (Regs.AX \ 256)ππEND FUNCTIONππSUB DrawBox (ULRow, ULCol, LRRow, LRCol, Style) STATICπ π  Length = LRCol - ULCol + 1            'calculate this just onceπ π  IF Style = 1 THENπ    LineType = 196π    VertBar$ = "│"π  ELSEπ    LineType = 205π    VertBar$ = "║"π  END IFππ  FOR X = ULRow TO LRRow                'first draw the wallsπ    LOCATE X, ULColπ    Temp = 32π    IF X = ULRow OR X = LRRow THEN Temp = LineTypeπ    PRINT VertBar$; STRING$(Length - 2, Temp); VertBar$;π  NEXTππ  IF Style = 1 THEN                     'then draw the cornersπ    LOCATE ULRow, ULCol: PRINT "┌";π    LOCATE ULRow, LRCol: PRINT "┐";π    LOCATE LRRow, ULCol: PRINT "└";π    LOCATE LRRow, LRCol: PRINT "┘";π  ELSEπ    LOCATE ULRow, ULCol: PRINT "╔";π    LOCATE ULRow, LRCol: PRINT "╗";π    LOCATE LRRow, ULCol: PRINT "╚";π    LOCATE LRRow, LRCol: PRINT "╝";π  END IFππEND SUBππSUB DrawScreen STATICππ  SHARED MainFG, MainBG, Bar$π π  '---- Draw the title screen and surrounding boxes.π  'π  COLOR MainFG, MainBG: CLS : LOCATE , , 0π  CALL DrawBox(One, One, 24, 80, 2)π  LOCATE 2, 24: PRINT "PC Magazine's PC-SETUP Version 1.00"π  LOCATE 3, 1: PRINT Bar$π π  CALL DrawBox(3, 27, 24, 43, One)π  LOCATE 3, 27:  PRINT "╤═══════════════╤";π  LOCATE 24, 27: PRINT "╧═══════════════╧";π π  LOCATE 4, 3: PRINT "Destination Directories";π  LOCATE , 31: PRINT "ZIP Files";π  LOCATE , 58: PRINT "Comments"ππ  LOCATE 25, 2π  PRINT "Up/Down/Space: Select files    Tab: Edit destination    F2: Begin    Esc: Quit";π πEND SUBππSUB EarlyEnd STATICππ  IF Prompt%(One) THENπ    COLOR 7, 0π    CLSπ    LOCATE 24, , 1π    ENDπ  END IFπ  LOCATE , , 0ππEND SUBππSUB Editor (Text$, Row, LeftCol, Length, KeyCode) STATICππ  SHARED HiFG, HiBG, NormFG, NormBG, MonoMon, CsrSizeππ  '----- Work with a temporary copy.π  Edit$ = SPACE$(Length)π  LSET Edit$ = Text$ππ  '----- See where to begin editing and print the string.π  TxtPos = 1π  LOCATE Row, LeftCol, 1, CsrSize - 1, CsrSizeπ  COLOR HiFG, HiBGπ  PRINT Edit$;ππ  '----- This is the main loop for handling key presses.π  DOπ     LOCATE , LeftCol + TxtPos - 1, 1ππ     DOπ       Ky$ = UCASE$(INKEY$)π     LOOP UNTIL LEN(Ky$)        'wait for a keypressππ     IF LEN(Ky$) = 1 THEN       'create a key codeπ       KeyCode = ASC(Ky$)       'regular character keyπ     ELSE                       'extended keyπ       KeyCode = -ASC(RIGHT$(Ky$, 1))π     END IFππ     '----- Branch according to the key pressed.π     SELECT CASE KeyCodeππ       '----- Backspace: decrement the pointer and theπ       '      cursor, and ignore if in the first column.π       CASE 8π         TxtPos = TxtPos - 1π         IF TxtPos < 1 THEN TxtPos = 1π         LOCATE , LeftCol + TxtPos - 1, 0π         IF TxtPos > 0 THENπ           IF InsStatus THENπ             MID$(Edit$, TxtPos) = MID$(Edit$, TxtPos + 1) + " "π           ELSEπ             MID$(Edit$, TxtPos) = " "π           END IFπ           PRINT MID$(Edit$, TxtPos);π         END IFππ       '----- Enter or Escape: this block is optional inπ       '      case you want to handle these separately.π       CASE 13, 27π         EXIT DO                'exit the subprogramππ       '----- Letter keys: turn off the cursor to hideπ       '      the printing, handle Insert mode as needed.π       CASE 32 TO 254π         LOCATE , , 0π         IF InsStatus THEN      'expand the stringπ           MID$(Edit$, TxtPos) = Ky$ + MID$(Edit$, TxtPos)π           PRINT MID$(Edit$, TxtPos);π         ELSE                   'else insert characterπ           MID$(Edit$, TxtPos) = Ky$π           PRINT Ky$;π         END IFπ         TxtPos = TxtPos + 1    'update position counterπ         IF TxtPos > Length THEN TxtPos = Lengthππ       '----- Left arrow: decrement the position counter.π       CASE -75π         TxtPos = TxtPos - 1π         IF TxtPos < 1 THEN TxtPos = 1ππ       '----- Right arrow: increment position counter.π       CASE -77π         TxtPos = TxtPos + 1π         IF TxtPos > Length THEN TxtPos = Lengthππ       '----- Home: jump to the first character position.π       CASE -71π         TxtPos = 1ππ       '----- End: search for the last non-blank, andπ       '      make that the current editing position.π       CASE -79π         FOR N = Length TO 1 STEP -1π           IF MID$(Edit$, N, 1) <> " " THEN EXIT FORπ         NEXTπ         TxtPos = N + 1π         IF TxtPos > Length THEN TxtPos = Lengthππ       '----- Insert key: toggle the Insert state andπ       '      adjust the cursor size.π       CASE -82π         InsStatus = NOT InsStatusπ         IF InsStatus THENπ           LOCATE , , , CsrSize \ 2, CsrSizeπ         ELSEπ           LOCATE , , , CsrSize - 1, CsrSizeπ         END IFππ       '----- Delete: delete the current character andπ       '      reprint what remains in the string.π       CASE -83π         MID$(Edit$, TxtPos) = MID$(Edit$, TxtPos + 1) + " "π         LOCATE , , 0π         PRINT MID$(Edit$, TxtPos);ππ       '---- All other keys: exit the subprogramπ       CASE ELSEπ         EXIT DOπ     END SELECTππ  '----- Loop until the cursor moves out of the field.π  LOOPππ  LSET Edit$ = LTRIM$(Edit$)    'trim and reprint the text in the normalπ  LOCATE , 2                    ' color before returningπ  COLOR NormFG, NormBGπ  PRINT Edit$ππ  Text$ = RTRIM$(Edit$)         'now trim what's on the right tooπ πEND SUBππSUB ErrorEnd (Message$) STATICππ  COLOR 7, 0π  CLSπ  LOCATE 13, 34 - LEN(Message$) \ 2, 1π  PRINT "Error: "; Message$; ", ending."π  ENDππEND SUBππFUNCTION Execute% (Program$, Parameter$) STATICπ π  '---- Prepare the program name and parameter strings for processing.  DOSπ  '     requires that the parameter string hold the length of the parameterπ  '     text, followed by the parameter text, and then followed by a CHR$(13)π  '     Enter byte.  The parameter block holds two CHR$(0) bytes followed byπ  '     the address and segment of the parameter string.π  'π  DIM Block AS STRING * 14         'this is the DOS parameter blockπ  DIM Parm AS STRING * 50          'and this is the actual parameter textπ π  ZBuffer$ = Program$ + Zero$      'make an ASCIIZ string for DOSπ π  LSET Parm$ = CHR$(LEN(Parameter$)) + Parameter$ + CHR$(13)π  LSET Block$ = Zero$ + Zero$ + MKI$(VARPTR(Parm$)) + MKI$(VARSEG(Parm$))ππ  Dummy& = SETMEM(-500000)         'free up memory for PKUNZIP to runππ  Regs.AX = &H4B00                 'DOS load/execute functionπ  Regs.DX = VARPTR(ZBuffer$)       'offset of program name into DXπ  Regs.ES = VARSEG(Block$)         'segment of parameter block into ESπ  Regs.BX = VARPTR(Block$)         'offset of parameter block into BXπ  Regs.DS = -1                     'set DS to BASIC's segmentπ  CALL InterruptX(DOS, Regs, Regs) 'execute it as subordinate processπ 'CALL InterruptX(DOS, Regs)       'use this with P.D.Q.ππ  IF Regs.Flags AND 1 THEN         'DOS had an error trying to run PKUNZIPπ    Execute% = -Regs.AX            'set function value to exit codeπ    EXIT FUNCTIONπ  END IFππ  Regs.AX = &H4D00                 'retrieve subordinate process codeπ  CALL Interrupt(DOS, Regs, Regs)π 'CALL Interrupt(DOS, Regs)        'use this with P.D.Q.π  Execute% = Regs.AX               'set function value to exit codeππ  Dummy& = SETMEM(500000)          'reclaim the memory reliquished earilerππEND FUNCTIONππFUNCTION ExeName$ STATICππ  'Returns the name of the currently running program; requires DOS 3.0 +ππ  '---- DOS Interrupt &H21 service &H62 returns the PSP segment in BXπ  Regs.AX = &H6200π  CALL Interrupt(DOS, Regs, Regs)π 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.ππ  '---- The environment segment is at address &H2C/&H2D in PSP segmentπ  DEF SEG = Regs.BXπ  DEF SEG = PEEK(&H2C) + PEEK(&H2D) * 256ππ  '---- Search the environment segment for two zero bytes in a row.  A countπ  '     word (which we skip over) follows that, and the program name followsπ  '     the count word.π  Byte = 0π  DOπ    IF PEEK(Byte) = 0 THEN              'this is zeroπ      IF PEEK(Byte + 1) = 0 THEN        'this is tooπ        Byte = Byte + 2                 'so skip bothπ        EXIT DO                         'all doneπ      END IFπ    END IF                              'else,π    Byte = Byte + 1                     'keep lookingπ  LOOPππ  IF PEEK(Byte) = 1 THEN                'if this count byte = 1π    Byte = Byte + 2                     'the name followsπ    DO WHILE PEEK(Byte)                 'up to another zeroπ      Tmp$ = Tmp$ + CHR$(PEEK(Byte))    'this is a different Tmp$ on purposeπ      Byte = Byte + 1π    LOOPπ    ExeName$ = Tmp$                     'assign the function outputπ  END IFππEND FUNCTIONππFUNCTION FileCount% (FileSpec$, DirFlag)π π  Regs.DX = VARPTR(DTA)                 'set new DTA addressπ  Regs.AX = &H1A00                      'specify service 1Ahπ  CALL Interrupt(DOS, Regs, Regs)       'DOS set DTA serviceπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.ππ  Temp = 0                              'clear the counterπ  ZBuffer$ = FileSpec$ + Zero$          'make an ASCIIZ stringππ  Regs.DX = VARPTR(ZBuffer$)            'the file spec addressπ  Regs.CX = 39                          'file attribute = all filesπ  IF DirFlag THEN Regs.CX = 39 OR 16    'include directories tooπ  Regs.AX = &H4E00                      'find first matching name serviceππ  DOπ    CALL Interrupt(DOS, Regs, Regs)     'see if there's a matchπ   'CALL Interrupt(DOS, Regs)           'use this with P.D.Q.π    IF Regs.Flags AND 1 THEN EXIT DO    'no more filesππ    IF DirFlag THEN                     'do we want directories?π      IF ASC(DTA.Attribute) AND 16 THEN 'yes, but is this a directory?π        IF ASC(DTA.FileName) <> 46 THEN 'filter "." and ".." (46 = period)π          Temp = Temp + 1               'we got another directory nameπ        END IFπ      END IFπ    ELSEπ      Temp = Temp + 1                   'we got another file nameπ    END IFπ     π    Regs.AX = &H4F00                    'find next name serviceπ  LOOPππ  FileCount% = Temp                     'assign the function outputπ πEND FUNCTIONππFUNCTION GetComment$ (Zip$) STATIC      'read comment from file named in Zip$ππ  ZipID$ = "PK" + CHR$(5) + CHR$(6)     'this identifies a file as a ZIP fileπ π  OPEN RTRIM$(Zip$) FOR BINARY AS #1    'open the .ZIP fileπ  FileSize& = LOF(1)                    'get and save its lengthπ  BufferSize = 3072                     'the default header sizeπ  IF BufferSize > FileSize& THEN BufferSize = FileSize&π  Temp$ = SPACE$(BufferSize)            'make buffer to receive ZIP headerππ  GET #1, FileSize& - BufferSize + 1, Temp$π  CLOSEππ  Temp = 0                              'find the last occurrence of PK IDπ  DOπ     HeaderOffset = Temp                'remember where this one isπ     Temp = INSTR(Temp + 1, Temp$, ZipID$)      'find the next oneπ  LOOP WHILE Temp                               'until no moreππ  IF HeaderOffset THEN                  'if there's a comment, extract itπ    CommentLen = CVI(MID$(Temp$, HeaderOffset + 20, 2))π    GetComment$ = MID$(Temp$, HeaderOffset + 22, CommentLen)π  END IFππ  Temp$ = ""                            'free up the memoryππEND FUNCTIONππFUNCTION GetDir$ STATICπ π  Regs.AX = &H4700                      'DOS get directory serviceπ  Regs.DX = 0                           'the drive goes in DL, 0 = defaultπ  Regs.SI = VARPTR(ZBuffer$)            'show DOS where ZBuffer$ isπ  CALL Interrupt(DOS, Regs, Regs)       'call DOSπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.π π  IF Regs.Flags AND 1 THEN              'must be an invalid driveπ    GetDir$ = ""π  ELSEπ    Temp = INSTR(ZBuffer$, Zero$)       'find the zero byte, and return onlyπ    GetDir$ = "\" + LEFT$(ZBuffer$, Temp - 1) ' what precedes itπ  END IFππEND FUNCTIONππFUNCTION GetDrive% STATICπ π  Regs.AX = &H1900                      'DOS Get Current Drive serviceπ  CALL Interrupt(DOS, Regs, Regs)       'call DOSπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.π  GetDrive% = (Regs.AX AND 255) + 65    'drive returned in AL as 0=A, 1=B...ππEND FUNCTIONππFUNCTION IntVal% (Work$) STATICππ 'IntVal is an integer-only VAL substitute that reduces .EXE size up to 10Kππ  Length = LEN(RTRIM$(Work$))π  Value = 0ππ  FOR X = Length TO 1 STEP -1π    Temp = MidChar%(Work$, X)π    IF Temp > 47 AND Temp < 58 THENπ      IF X = Length THENπ        Value = Temp - 48π      ELSEπ        Value = Value + (Temp - 48) * 10π      END IFπ    END IFπ  NEXTπ π  IntVal% = ValueππEND FUNCTIONππFUNCTION MakeDir% (DirName$) STATICππ  ZBuffer$ = DirName$ + Zero$           'make an ASCIIZ stringπ  Regs.AX = &H3900                      'DOS create directory serviceπ  Regs.DX = VARPTR(ZBuffer$)            'show DOS where ZBuffer$ isπ  CALL Interrupt(DOS, Regs, Regs)       'call DOSπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.ππ  IF Regs.Flags AND 1 THEN              'must be an invalid drive or bad nameπ    MakeDir% = -1                       'return -1 as an errorπ  END IFππEND FUNCTIONππFUNCTION MidChar% (Work$, Position)ππ  IF Position <= LEN(Work$) THENπ    MidChar% = ASC(MID$(Work$, Position, 1))π  ELSEπ    MidChar% = -1π  END IFππEND FUNCTIONππSUB MidCharS (Work$, Position, NewChar) STATICππ  MID$(Work$, Position, 1) = CHR$(NewChar)ππEND SUBππFUNCTION Prompt% (Which) STATICππ  SHARED HiFG, HiBG, MonoMon, CsrSize, DestPath$ππ  DEF SEG = &HB800                      'assume a color displayπ  IF MonoMon THEN DEF SEG = &HB000      'nope, use the mono video segmentππ  REDIM SaveScrn(10 TO 13, 14 TO 66)    'this saves the underlying screenπ  FOR Row = 10 TO 13                    'Here, Row and Col are zero-basedπ    FOR Col = 14 TO 66π      Temp = Row * 160 + Col * 2        'calculate the address just onceπ      SaveScrn(Row, Col) = PEEK(Temp) + 256 * PEEK(Temp + 1)π    NEXTπ  NEXTππ  COLOR HiFG, HiBGπ  CALL DrawBox(11, 15, 14, 67, One)     'draw the surrounding boxπ  IF Which THEN                         'we were called from EarlyEndπ    LOCATE 12, 31                       'show this directory nameπ    PRINT "Are you sure you want";      'print the prompt messageπ    LOCATE 13, 29, 1, CsrSize - 1, CsrSizeπ    PRINT "to quit installing? (Y/N) ";π  ELSE                                  'prompt if okay to overwrite filesπ    LOCATE 12, 17                       'show this directory nameπ    PRINT "Installing to "; DestPath$   'print the prompt messageπ    LOCATE 13, 17, 1, CsrSize - 1, CsrSizeπ    PRINT "Prompt before overwriting existing files? (Y/N) ";π  END IFπ  DO                                    'wait for Yes or No (only)π    Temp$ = UCASE$(INKEY$)π  LOOP UNTIL INSTR(" YN", Temp$) > 1π  Prompt% = 0                           'assume the answer is Noπ  IF Temp$ = "Y" THEN Prompt% = -1      'they answered Yesππ  FOR Row = 10 TO 13                    'now restore the screenπ    FOR Col = 14 TO 66                  'as aboveπ      Temp = Row * 160 + Col * 2π      POKE Temp, SaveScrn(Row, Col) AND 255π      POKE Temp + 1, SaveScrn(Row, Col) \ 256π    NEXTπ  NEXTππ  ERASE SaveScrnπ  LOCATE 2                              'put cursor at the top of the screenππEND FUNCTIONππSUB ReadNames (Spec$, Array$()) STATIC  'reads file names into an arrayππ  ZBuffer$ = Spec$ + Zero$              'make an ASCIIZ string of the specπ  CurFile = 0                           'zero out the file counterππ  Regs.DX = VARPTR(ZBuffer$)            'the file spec addressπ  Regs.CX = 39                          'file attribute = all filesπ  Regs.AX = &H4E00                      'find first matching name serviceππ  DOπ    CALL Interrupt(DOS, Regs, Regs)     'see if there's a matchπ   'CALL Interrupt(DOS, Regs)           'use this with P.D.Q.π    IF Regs.Flags AND 1 THEN EXIT DO    'no more filesππ    CurFile = CurFile + 1               'we found another file nameπ    Array$(CurFile) = SPACE$(12)        'create the string to hold itπ    Temp$ = DTA.FileName                'assign the nameπ    Temp = INSTR(Temp$, Zero$)          'find the terminating zero byteπ    LSET Array$(CurFile) = LEFT$(Temp$, Temp - 1) 'keep only what precedes itππ    Regs.AX = &H4F00                    'find the next nameπ  LOOPππEND SUBππSUB SelectFiles (FileNames$(), Choice, ExitCode) STATICππ  SHARED NumFiles, NormFG, NormBG, HiFG, HiBG, MainFG, MainBGππ  IF ExitCode = -60 THEN EXIT SUB       'we got here via F2 pressed in Editorππ  COLOR MainFG, MainBG                  'first display all of the choicesπ  LOCATE 25, 2                          'and update the status lineπ  PRINT "Up/Down/Space: Select files    Tab: Edit destination    F2: Begin    Esc: Quit";ππ  COLOR NormFG, NormBGπ  FOR Temp = 1 TO NumFilesπ    LOCATE 4 + Temp, 28, 0              'and turn off the cursorπ    PRINT FileNames$(Temp);π  NEXTππ  IF Choice = 0 THEN Choice = 1         'start at element 1 if first timeπ  IF Choice > UBOUND(FileNames$) THEN Choice = 1 'or if past the endππ  DOπ    LOCATE 4 + Choice, 28               'redraw current choice highlightedπ    COLOR HiFG, HiBGπ    PRINT FileNames$(Choice);π    DOπ      KeyHit$ = INKEY$                  'see what they want to doπ    LOOP UNTIL LEN(KeyHit$)             'wait for a keypressπ   π    IF LEN(KeyHit$) = 1 THEN            'set ExitCode based on the type ofπ      ExitCode = ASC(KeyHit$)            'key (extended or not) they pressedπ    ELSEπ      ExitCode = -ASC(MID$(KeyHit$, 2))π    END IFπ   π    IF ExitCode = 32 THEN               'spacebarπ      IF MidChar%(FileNames$(Choice), 2) = 251 THEN 'if it's now checkedπ        Temp = 32                       'remove the check markπ      ELSEπ        Temp = 251                       'else add a check markπ      END IFπ      CALL MidCharS(FileNames$(Choice), 2, Temp)π      ExitCode = -80                    'select the next file automaticallyπ    END IFππ    SELECT CASE ExitCodeπ      CASE -80                          'Down Arrowπ        GOSUB Deselectπ        Choice = Choice + 1π        IF Choice > NumFiles THEN Choice = 1π      CASE -79                          'End keyπ        GOSUB Deselectπ        Choice = NumFilesπ      CASE -72                          'Up Arrowπ        GOSUB Deselectπ        Choice = Choice - 1π        IF Choice = 0 THEN Choice = NumFilesπ      CASE -71                          'Homeπ        GOSUB Deselectπ        Choice = 1π      CASE -60                          'F2π        EXIT SUBπ      CASE 27                           'Escapeπ        EXIT SUBπ      CASE 9                            'Tabπ        LOCATE Choice + 4, 33π        GOSUB Deselectπ        EXIT SUBπ      CASE ELSE                         'this is needed for QB 4.0 onlyπ    END SELECTπ  LOOPππDeselect:                               're-paint the current choice, so itπ  LOCATE Choice + 4, 28                 '  won't appear activeπ  COLOR NormFG, NormBGπ  PRINT FileNames$(Choice);π  RETURNππEND SUBππSUB SetDrive (Drive$) STATICπ   π  Regs.AX = &HE00                       'DOS Set Drive service in AHπ  Regs.DX = ASC(UCASE$(Drive$)) - 65    'DL = 0 for A:, 1 for B:, and so onππ  CALL Interrupt(DOS, Regs, Regs)       'see if there's a matchπ 'CALL Interrupt(DOS, Regs)             'use this with P.D.Q.ππEND SUBππFUNCTION SourceDir$ STATICππ  Temp$ = ExeName$                  'get the directory we're running fromππ  FOR X = LEN(Temp$) TO 1 STEP -1   'isolate the drive letter and pathπ    Temp = MidChar%(Temp$, X)       '  (strip off the name PC-SETUP.EXE)π    IF Temp = 58 OR Temp = 92 THEN  'look for a colon or a backslashπ      SourceDir$ = LEFT$(Temp$, X)  'by searching for ":" or "\" this willπ      EXIT FOR                      ' work even if the program is renamedπ    END IFπ  NEXTππEND FUNCTIONππSUB StuffBuf (Cmd$) STATICπ       π  '----- Set the segment for poking, define the buffer head and tail, andπ  '      then poke each character into the keyboard buffer.π π  Temp = LEN(Cmd$)ππ  DEF SEG = 0π  POKE &H41A, &H1Eπ  POKE &H41C, &H1E + Temp * 2π   π  FOR X = 1 TO Tempπ    POKE &H41C + X * 2, ASC(MID$(Cmd$, X))π  NEXTππEND SUBππThe ABC Programmer             ADVANCED QWK READER            Try SIMPLE QWK READER          04-15-96 (01:10)       QB, QBasic, PDS        494  15280    QWKREAD.BAS '=====================[ More Complex QWK Reader ]=======================π'π' This QWK Reader let's you read the MESSAGES.DAT file contained in allπ' .QWK Packets.  Also allows for easy dumping QWK --> ASCII TXT Format.π'π' Original PASCAL code by Swag Support Team (Gayle Davis)π' Converted and optimized to BASIC by William Yu (04-15-96)π'π' Advanced features for this QWK Reader include:π'   * Option of extracting single messagesπ'   * Full message scrollπ'   * Ability to choose which message to readπ'π' Basic colors (B&W) for monochrome support.π' Careful, comment out the PCOPY routine and uncomment the BSAVE/BLOADπ' routine in SUB MessageList if you do have a monochrome adapter.π'π' I've tried to implement as many features without adding too muchπ' extraneous code.π' This program leaves much to be desired, here are some suggestions:π'π'    - Unpack .QWK on the flyπ'    - Option of sending the message to printerπ'    - Option of changing the saved message file nameπ'    - Search optionπ'    - Use screen scroll routineπ'----------------------------------------------------------------------ππ'$DYNAMICπDEFINT A-ZπDECLARE SUB DumpHeader (QWK AS ANY)πDECLARE SUB ReadMessage (HDR AS ANY, RelNum&, Chunks)πDECLARE SUB ReadMsg (NumChunks)πDECLARE SUB ReadWriteHdr (QWK AS ANY)πDECLARE SUB DrawBox (X%, Y%, XX%, YY%, C%, BC%, Solid%, CharSet%)πDECLARE SUB MessageList (Messages&(), Max%, QWK AS ANY)πDECLARE SUB DisplayMessage (Messages&(), FPNum, QWK AS ANY, Max)ππCONST Height = 25                     ' 25/43/50πCONST False = 0                       ' False = 0πCONST True = NOT False                ' True = -1πCONST DumpQWKtoFile = False           ' Dump messages to file?π                                      ' True = Dump to fileπ                                      ' False = View from screenπCONST DumpQWKFileName$ = "DUMP.MSG"   ' Dump messages to this file nameπCONST QWKPacket$ = "MESSAGES.DAT"     ' MESSAGES.DAT or *.SWGπ                                      ' Specify the path if requiredπTYPE MSGDatHdr                        ' MESSAGES.DAT File Structureπ    Status   AS STRING * 1            '  128 bytes altogetherπ    MSGNum   AS STRING * 7π    Date     AS STRING * 8π    Time     AS STRING * 5π    UpTO     AS STRING * 25π    UpFROM   AS STRING * 25π    Subject  AS STRING * 25π    PassWord AS STRING * 12           ' Never/rarely usedπ    ReferNum AS STRING * 8π    NumChunk AS STRING * 6π    Alive    AS STRING * 1π    LeastSig AS STRING * 1            ' Conference #π    MostSig  AS STRING * 1            ' Used for conf. # greater than 255π    Reserved AS STRING * 3πEND TYPEππDIM QWK AS MSGDatHdrπDIM Messages&(10000)ππWIDTH 80, HeightπCLSππ  OPEN QWKPacket$ FOR BINARY AS #1π  IF DumpQWKtoFile THEN OPEN DumpQWKFileName$ FOR OUTPUT AS #2π  Count& = 129  ' Skip Copyright informationπ  Num = 0π  WHILE Count& < LOF(1)π        Num = Num + 1π        ReadMessage QWK, Count&, Chunksπ        A$ = INKEY$                          ' ESC Key quits/abortsπ        IF DumpQWKtoFile THENπ          LOCATE 1, 1π          PRINT USING "Complete: ###.#%"; (Count& + (128 * Chunks)) / LOF(1) * 100π          PRINT #2,π        ELSEπ          Messages&(Num) = Count&            ' Count number of messagesπ          LOCATE 1, 1: PRINT "Reading:"; Numπ          PRINT USING "Complete: ###.#%"; (Count& + (128 * Chunks)) / LOF(1) * 100π        END IFπ        IF A$ = CHR$(27) THEN CLOSE : END    ' ESC quits Viewing or Dumpingπ        Count& = Count& + (128 * Chunks)π  WENDπ  CLSπ  IF NOT DumpQWKtoFile THEN MessageList Messages&(), Num, QWKπ  CLOSEπ  ENDππREM $STATICπSUB DisplayMessage (Messages&(), FPNum, QWK AS MSGDatHdr, Max)ππBakFPNum = FPNum        ' So we don't get confused when we jump Next/PrevππBeginHere:π π  DIM Buff AS STRING * 128  ' Read in 128 byte blocksπ  DIM SetString AS STRING * 80π  DIM Text$(500)            ' Too lazy to implement file pointers :>π                            ' Messages usually don't exceed 500 lines anywaysπ  COLOR 7, 0: CLSπ  LOCATE Height, 1: COLOR 0, 7: PRINT "  Up/Down/PgUp/PgDn/Home/End       E[";π  COLOR 15: PRINT "X"; : COLOR 0: PRINT "]tract   +/- [N]ext/[P]rev              ";π  COLOR 7, 0π  LOCATE 2, 1π    SEEK #1, Messages&(FPNum)π    ReadWriteHdr QWKπ    Chunks = VAL(QWK.NumChunk)π    PRINT "  Date: "; QWK.Date; " ("; QWK.Time; ")";π    PRINT , , "Number: "; QWK.MSGNumπ    PRINT "  From: "; QWK.UpFROM;π    PRINT , "Refer#: "; QWK.ReferNumπ    PRINT "    To: "; QWK.UpTO;π    PRINT , " Recvd: ";π    InCase$ = "-`^#"π    IF INSTR(QWK.Status, InCase$) THENπ      PRINT "YES"π    ELSEπ      PRINT "NO"π    END IFπ    PRINT "  Subj: "; QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT , "  Conf: "; "("; Conference$; ")"π    LOCATE 2, 66: PRINT USING "#### of ####"; FPNum; Maxπ    DrawBox 1, 1, 80, 6, 7, 0, 0, 1π π  N = 1π  FOR J = 1 TO Chunks - 1π    GET #1, , Buffπ    X = 1π    FOR I = 1 TO 128π      IF MID$(Buff, I, 1) = CHR$(227) THENπ        N = N + 1π      ELSEπ        Text$(N) = Text$(N) + MID$(Buff, I, 1)π      END IFπ    NEXT Iπ  NEXT Jπ  MaxNum = Nπ  LOCATE 5, 66: PRINT "# Lines:"; MaxNumπ  LOCATE 7ππFOR I = 1 TO Height - 7π  A = INSTR(Text$(I), ">")                        ' Quoteπ  IF A < 6 AND A > 0 THEN COLOR 15 ELSE COLOR 7   ' Color BrightWhiteπ  SetString = Text$(I)π  PRINT SetString;π  IF I = MaxNum THEN EXIT FORπNEXT IπI = 1πCOLOR 0, 7: LOCATE Height, 67: PRINT I; "..."; I + Height - 7;ππ  DOπ    DOπ      A$ = INKEY$π    LOOP UNTIL A$ <> ""π    IF LEN(A$) = 2 THEN Char = -ASC(RIGHT$(A$, 1)) ELSE Char = ASC(A$)π    SELECT CASE Charπ      CASE 43, 78, 110                  ' +/N Goto Next Messageπ        FPNum = FPNum + 1π        IF FPNum > Max THEN FPNum = 1π        ERASE Text$π        GOTO BeginHereπ      CASE 45, 80, 112                  ' -/P Goto Previous Messageπ        FPNum = FPNum - 1π        IF FPNum = 0 THEN FPNum = Maxπ        ERASE Text$π        GOTO BeginHereπ      CASE 88, 120                      ' X - Extract Messageπ        FileName$ = LTRIM$(STR$(FPNum)) + ".MSG"π        OPEN FileName$ FOR OUTPUT AS #2π        DumpHeader QWKπ        FOR X = 1 TO MaxNumπ           PRINT #2, Text$(X)π        NEXT Xπ        CLOSE #2π        LOCATE 3, 63: COLOR 15, 0: PRINT "Saved as "; FileName$π      CASE -72                          ' Up arrow keyπ        IF I > 1 THENπ          I = I - 1π          GOSUB ShowMessageπ        END IFπ      CASE -73                          ' PageUpπ        I = I - Height + 7π        IF I < 1 THEN I = 1π        GOSUB ShowMessageπ      CASE -80                          ' Down arrow keyπ        IF I < MaxNum THENπ          I = I + 1π          GOSUB ShowMessageπ        END IFπ      CASE -81                          ' PageDownπ        I = I + Height - 7π        IF I > MaxNum - Height + 7 THEN I = MaxNum - Height + 7π        GOSUB ShowMessageπ      CASE -79                          ' Endπ        I = MaxNum - Height + 7π        GOSUB ShowMessageπ      CASE -71                          ' Homeπ        I = 1π        GOSUB ShowMessageπ      CASE 27                           ' Escape key pressedπ         GOTO BackToIndexπ    END SELECTπ  LOOPππShowMessage:π  IF MaxNum < Height - 7 THEN RETURNπ  LOCATE 7, 1π  FOR X = 1 TO Height - 7π    A = INSTR(Text$(I), ">")                            ' Quoteπ    IF A < 6 AND A > 0 THEN COLOR 15, 0 ELSE COLOR 7, 0 ' Color BrightWhiteπ    SetString = Text$(I)π    PRINT SetString;π    IF I >= MaxNum THEN EXIT FORπ    I = I + 1π  NEXT Xπ  I = I - Height + 7π  COLOR 0, 7: LOCATE Height, 67: PRINT I; "..."; I + Height - 7;πRETURNππBackToIndex:π  FPNum = BakFPNumππEND SUBππSUB DrawBox (X%, Y%, XX%, YY%, C%, BC%, Solid%, CharSet%)ππIF CharSet% = 1 THENπ  Char1$ = "┌"π  CharHoz$ = "─"π  Char2$ = "┐"π  CharVert$ = "│"π  Char3$ = "└"π  Char4$ = "┘"πEND IFππIF CharSet% = 2 THENπ  Char1$ = "╔"π  CharHoz$ = "═"π  Char2$ = "╗"π  CharVert$ = "║"π  Char3$ = "╚"π  Char4$ = "╝"πEND IFππCOLOR C%, BC%πA = (XX% - X%) - 1πLOCATE Y%, X%: PRINT Char1$; STRING$(A, CharHoz$); Char2$;πFOR I = Y% + 1 TO YY% - 1π  LOCATE I, X%: PRINT CharVert$;π  IF Solid% = 1 THEN PRINT SPACE$(A);π  LOCATE I, XX%: PRINT CharVert$;πNEXT IπLOCATE YY%, X%: PRINT Char3$; STRING$(A, CharHoz$); Char4$;ππEND SUBππSUB DumpHeader (QWK AS MSGDatHdr)π   π    PRINT #2, STRING$(79, "=")π    PRINT #2, "   Date: "; QWK.Date; " ("; QWK.Time; ")";π    PRINT #2, , , "Number: "; QWK.MSGNumπ    PRINT #2, "   From: "; QWK.UpFROM;π    PRINT #2, , "Refer#: "; QWK.ReferNumπ    PRINT #2, "     To: "; QWK.UpTO;π    PRINT #2, , " Recvd: ";π    InCase$ = "-`^#"π    IF INSTR(QWK.Status, InCase$) THENπ      PRINT #2, "YES"π    ELSEπ      PRINT #2, "NO"π    END IFπ    PRINT #2, "Subject: "; QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT #2, , "  Conf: "; "("; Conference$; ")"π    PRINT #2, STRING$(79, "-")ππEND SUBππSUB MessageList (Messages&(), Max, QWK AS MSGDatHdr)ππ' Scrolling up/down pages can be optimized by using a Screen Scroll routineπ' requiring either a call to ABSOLUTE() Function for QBasic or interruptπ' routines via INTRPT.OBJ in QB.LIBπ' Recommended ABC Packet: INTERRPT.ABC, DOS.ABC, and TEXT.ABC, ASMCODE.ABCππ  DrawBox 1, 1, 80, 3, 7, 0, 0, 2π  DrawBox 1, Height - 1, 80, Height, 7, 0, 0, 1π π  LOCATE 2, 3: PRINT "Number  From               To                 Subject                   Conf"π  FOR I = 1 TO Height - 5π    IF I > Max THEN EXIT FORπ    SEEK #1, Messages&(I)π    ReadWriteHdr QWKπ    LOCATE I + 3, 3: PRINT USING "#####"; VAL(QWK.MSGNum);π    PRINT "   "; LEFT$(QWK.UpFROM, 19);π    PRINT LEFT$(QWK.UpTO, 19); QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT " ("; Conference$; ")";π  NEXT Iππ  Index = 1π  Position = 4π  SEEK #1, Messages&(Index)π  ReadWriteHdr QWKπ  COLOR 0, 7π  LOCATE Position, 2: PRINT USING " #####"; VAL(QWK.MSGNum);π  PRINT "   "; LEFT$(QWK.UpFROM, 19);π  PRINT LEFT$(QWK.UpTO, 19); QWK.Subject;π  Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π  PRINT " ("; Conference$; ")";π π  DOπ    DOπ      A$ = INKEY$π    LOOP UNTIL A$ <> ""π    IF LEN(A$) = 2 THEN Char = -ASC(RIGHT$(A$, 1)) ELSE Char = ASC(A$)π    SELECT CASE Charπ      CASE 13                          ' ENTER Pressedπ        PCOPY 0, 1π        'DEF SEG = &HB000              ' Uncomment these linesπ        'BSAVE "LIST.TMP", 0, 4000     ' for monochrome supportπ        DisplayMessage Messages&(), Index, QWK, Maxπ        PCOPY 1, 0π        'BLOAD "LIST.TMP"π        'KILL "LIST.TMP"π      CASE -72                          ' Up arrow keyπ        IF Index > 1 THENπ          COLOR 7, 0: GOSUB SelectMsgNumπ          Index = Index - 1π          Position = Position - 1π          COLOR 0, 7: GOSUB SelectMsgNumπ        END IFπ      CASE -73                          ' PageUpπ       IF Max >= Height - 5 THENπ        IF Index <> 1 THENπ          Index = Index - Height + 5 - (Position - 4)π          IF Index <= 0 THEN Index = 1: Position = 4π          X = Positionπ          GOSUB PrevPageπ          Position = Xπ          Index = Index + (Position - 4)π          COLOR 0, 7: GOSUB SelectMsgNumπ        END IFπ       END IFπ      CASE -80                          ' Down arrow keyπ        IF Index <> Max THENπ          COLOR 7, 0: GOSUB SelectMsgNumπ          Index = Index + 1π          Position = Position + 1π          COLOR 0, 7: GOSUB SelectMsgNumπ        END IFπ      CASE -81                          ' PageDownπ       IF Max >= Height - 5 THENπ        IF Index + (2 * Height) - (Position - 4) - 6 >= Max THENπ          Index = Maxπ          Position = Height - 2π        ELSEπ          Index = Index + (2 * Height) - 11 - (Position - 4)π        END IFπ        X = Positionπ        GOSUB NextPageπ        Position = Xπ        IF Index <> Max THENπ          Index = Index - Height + 6 + (Position - 4)π        ELSEπ          Position = Height - 2π          Index = Maxπ        END IFπ        COLOR 0, 7: GOSUB SelectMsgNumπ       END IFπ      CASE -79                          ' Endπ       IF Max >= Height - 5 THENπ        Index = Max: Position = Height - 2π        GOSUB NextPageπ        GOSUB SelectMsgNumπ       END IFπ      CASE -71                          ' Homeπ       IF Max >= Height - 5 THENπ        Index = 1: Position = 4π        GOSUB PrevPageπ        GOSUB SelectMsgNumπ       END IFπ      CASE 27                           ' Escape key pressedπ        CLOSE : COLOR 7, 0: CLS : ENDπ    END SELECTπ  LOOPππSelectMsgNum:π  IF Position > Height - 2 THEN GOSUB NextPageπ  IF Position = 3 THEN GOSUB PrevPageπ  SEEK #1, Messages&(Index)π  ReadWriteHdr QWKπ  LOCATE Position, 2: PRINT USING " #####"; VAL(QWK.MSGNum);π  PRINT "   "; LEFT$(QWK.UpFROM, 19);π  PRINT LEFT$(QWK.UpTO, 19); QWK.Subject;π  Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π  PRINT " ("; Conference$; ")";πRETURNππNextPage:π  Index = Index - Height + 5π  FOR I = 1 TO Height - 5π    Index = Index + 1π    IF Index >= Max THEN EXIT FORπ    SEEK #1, Messages&(Index)π    ReadWriteHdr QWKπ    COLOR 7, 0π    LOCATE I + 3, 2: PRINT USING " #####"; VAL(QWK.MSGNum);π    PRINT "   "; LEFT$(QWK.UpFROM, 19);π    PRINT LEFT$(QWK.UpTO, 19); QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT " ("; Conference$; ")"π  NEXT Iπ  Position = Height - 2π  COLOR 0, 7πRETURNππPrevPage:π  Index = Index - 1π  FOR I = 1 TO Height - 5π    Index = Index + 1π    IF Index >= Max THEN EXIT FORπ    SEEK #1, Messages&(Index)π    ReadWriteHdr QWKπ    COLOR 7, 0π    LOCATE I + 3, 2: PRINT USING " #####"; VAL(QWK.MSGNum);π    PRINT "   "; LEFT$(QWK.UpFROM, 19);π    PRINT LEFT$(QWK.UpTO, 19); QWK.Subject;π    Conference$ = LTRIM$(STR$(ASC(QWK.MostSig) * 256 + ASC(QWK.LeastSig)))π    PRINT " ("; Conference$; ")";π  NEXT Iπ  Index = Index - (Height - 6)π  Position = 4: COLOR 0, 7πRETURNππEND SUBππSUB ReadMessage (QWK AS MSGDatHdr, RelNum&, Chunks)π π  SEEK #1, RelNum&π  ReadWriteHdr QWKπ  Chunks = VAL(QWK.NumChunk)π  IF DumpQWKtoFile THEN ReadMsg ChunksππEND SUBππSUB ReadMsg (NumChunks)ππ  DIM Buff AS STRING * 128ππ  FOR J = 1 TO NumChunks - 1π    GET #1, , Buffπ    FOR I = 1 TO 128π      IF MID$(Buff, I, 1) = CHR$(227) THENπ        PRINT #2,π      ELSEπ        PRINT #2, MID$(Buff, I, 1);π      END IFπ    NEXT Iπ  NEXT JππEND SUBππSUB ReadWriteHdr (QWK AS MSGDatHdr)ππ    GET #1, , QWK.Statusπ    GET #1, , QWK.MSGNumπ    GET #1, , QWK.Dateπ    GET #1, , QWK.Timeπ    GET #1, , QWK.UpTOπ    GET #1, , QWK.UpFROMπ    GET #1, , QWK.Subjectπ    GET #1, , QWK.PassWordπ    GET #1, , QWK.ReferNumπ    GET #1, , QWK.NumChunkπ    GET #1, , QWK.Aliveπ    GET #1, , QWK.LeastSigπ    GET #1, , QWK.MostSigπ    GET #1, , QWK.Reservedππ  IF DumpQWKtoFile THENπ    DumpHeader QWKπ  END IFππEND SUBππAndrew Jones                   TYPING DRILL                   FidoNet QUIK_BAS Echo          04-14-96 (14:33)       QB, QBasic, PDS        64   1408     TYPING.BAS  'Typing drill.  Very elementary, not sure if the timing is absolutelyπ'correct.ππCLSπword = 1πPRINT "Typing drill...  Type one sentence as quickly as you can..."πPRINT "It can be as short as you want or as long, but keep a constant length."πPRINT "The best drill sentence would be: 'The quick brown fox jumped over the lazy dog'"πPRINT "because it uses all alphabet keys...  Long sentences are more stastically"πPRINT "accurate."πPRINT "Timing starts at the first key pressed!"πPRINTπDOπb$ = INKEY$πLOOP UNTIL b$ <> ""πPRINT b$;πTIMER ONπON TIMER(1) GOSUB timerrπDOπa$ = INKEY$πSELECT CASE a$πCASE CHR$(8)πcorr = corr + 1πSOUND 400, .2πSOUND 500, .2πSOUND 400, .2πb$ = MID$(b$, 1, LEN(b$) - 1)πIF LEN(b$) >= 1 THENπLOCATE CSRLIN, POS(0) - 1πPRINT " ";πLOCATE CSRLIN, POS(0) - 1πELSEπLOCATE CSRLIN, 1πPRINT " ";πLOCATE CSRLIN, 1πEND IFπCASE CHR$(32) TO CHR$(127)πSOUND 200, .2πb$ = b$ + a$πPRINT a$;πCASE ELSEπEND SELECTπLOOP UNTIL a$ = CHR$(13)πFOR t = 1 TO LEN(b$)πm$ = MID$(b$, t, 1)πIF m$ = " " THEN word = word + 1πNEXTπPRINTπPRINTπPRINT "Statistics:"πIF sec = 0 THENπPRINT "No time was passed, at least according to significant figures used!"πENDπEND IFπPRINT "Seconds typing: "; secπPRINT "Words Per Second: "; word / secπPRINT "Words Per Minute: "; (word / sec) * 60πPRINT "Corrections Made: "; corrπ πENDπ πtimerr:πsec = sec + 1πRETURNπMichael Parker                 COM SUPPORT                    comp.lang.basic.misc           03-03-96 (07:25)       QB, QBasic, PDS        110  3328     COMSUPP.BAS '>   Help on how to access COM's 1 through 4 or 8. Please help.ππ'Here's a _very_ nice routine to open com1-com4 (up to 115k baud, too).π'These routines were written by Michael Parker.  Hope they help.π'Originally posted by Jonathan Leger <leger@pc2.pc.maricopa.edu>ππ'--- START HERE ---ππ' Quick Basic Routine OpenComπ' This routine will accept the entire OPEN command parametersπ' that is in QB 4.5 , the only exception is the baud rate andπ' COM port.  Baud rate is optional, if specified, this moduleπ' will set the specifed rate up to 115,200.  If the baud rateπ' is specifed at 0, the specifed port will be polled  for theπ' current baud rate and the baud rate will be set at the rateπ' that is present, if any.  NOTE:  the baud rate parameter onπ' the command line IS  NOT optional,  if you want this moduleπ' to set the baud rate,  put an extra comma  into the commandπ' line to replace the baud rate.  The COM Port will accept upπ' to COM 4 now.ππ' OPENCOM "COMX:{option list1 [baudrate,parity,databit]},{option list2}π' AS FileNum"π' examples:π' OPENCOM "COM1:38400 as 1"π' OPENCOM "COM4:,op500 as 1"π' OPENCOM "COM2:2400,n,8,1,op500 as 4"π' OPENCOM "COM3:,,, OP500 as 2"ππDECLARE SUB OPENCOM (InString$)πCALL OPENCOM(InString$)πENDππSUB OPENCOM (Sting$)πSting$ = LTRIM$(RTRIM$(Sting$))πPort$ = UCASE$(LEFT$(Sting$, 5))πSting$ = RIGHT$(Sting$, LEN(Sting$) - 5)πFOR x = 1 TO LEN(Sting$)π     H$ = MID$(Sting$, x, 1)π     IF UCASE$(H$) = "A" THENπ          H$ = H$ + MID$(Sting$, x + 1, 1)π          IF UCASE$(H$) = "AS" THENπ                FileNum = VAL(MID$(Sting$, x + 2, LEN(Sting$)))π                EXIT FORπ          END IFπ     END IFπ     InputString$ = InputString$ + H$πNEXT xπFOR x = 1 TO LEN(InputString$)π     IF MID$(InputString$, x, 1) <> "," THENπ          BaudRate$ = BaudRate$ + MID$(InputString$, x, 1)π     ELSEπ          InputString$ = MID$(InputString$, x + 1, LEN(InputString$))π          EXIT FORπ     END IFπNEXT xπIF LTRIM$(BaudRate$) = "" THENπ     BaudRate& = 0πEND IFπSELECT CASE Port$π     CASE "COM1:"π          BaseAddr% = &H3F8π          Port1$ = "COM1:"π     CASE "COM2:"π          BaseAddr% = &H2F8π          Port1$ = "COM2:"π     CASE "COM3:"π          BaseAddr% = &H2F8π          Port1$ = "COM1:"π     CASE "COM4:"π          BaseAddr% = &H3F8π          Port1$ = "COM2:"π     CASE ELSEπ          PRINT "Illegal COM Port"πEND SELECTππIF BaudRate$ = "" THENπ     OUT BaseAddr% + 3, INP(BaseAddr% + 3) OR &H80π     LSB% = INP(BaseAddr%)π     MSB% = INP(BaseAddr% + 1)π     OUT BaseAddr% + 3, INP(BaseAddr% + 3) AND &H7Fπ     Divisor& = MSB% * &H100 + LSB%π     IF Divisor& = 0 THENπ          BaudRate& = 0π     ELSEπ          BaudRate& = 115200 / Divisor&π     END IFπELSEπ     BaudRate& = VAL(BaudRate$)πEND IFπIF LEFT$(InputString$, 1) <> "," THENπ     InputString$ = "," + InputString$πEND IFπOPEN Port1$ + "300" + InputString$ FOR RANDOM AS FileNumπIF Port$ = "COM3:" THENπ     POKE &H400, &HE8πELSEIF Port$ = "COM4:" THENπ     POKE &H402, &HE8πEND IFπIF BaudRate& <> 0 THENπ     Divisors# = 115200 / BaudRate&πEND IFπLCR = BaseAddr% + 3πTemp = INP(LCR)πOUT LCR, Temp OR 128πOUT BaseAddr% + 1, INT(Divisors# / 256)πOUT BaseAddr%, Divisors#πOUT LCR, Temp AND 127ππEND SUBπDick Dennison                  DIAL A PHONE NUMBER            QB Tidbits                     10-19-91 (00:00)       QB, QBasic, PDS        192  5630     DIAL.BAS    ' DIAL    BAS : Dial a phone number on the screenπ' author .....: Dick Dennison [74270,3636] 1:272/34 914-374-3903 *hst 24 hrsπ' supports ...: COM1 - COM4π' syntax .....: DIAL portnum%π' includes ...: Noneπ' notes ......: Move the cursor with the arrow keys to the phone numberπ'             : Press the ']' key and move the right arrow key acrossπ'             : the number and press Enterπ'             : Uses Basic's OPEN COMx commandsπ' cost .......: Free = Credit where credit dueπ'             : Do not use as is for commercial use - may not be resoldπ'             : May not be rebundled without prior written consentπ' dated ......: 10/19/91π' credits ....: Thanks to Mike Welch for CLIPMSG, and Pete Petrakis for his        π'             : notes on Com Port swapping.ππDECLARE SUB Hangup (Port%)πDECLARE SUB Getnum (row%, Col%, markit%, Port%)πDECLARE SUB Setup (Port%)ππCOLOR 0, 7πLOCATE 25, 1πPRINT "     Move the cursor to the beginning of the phone number and press Space  ";πLOCATE 10, 1πIF VAL(COMMAND$) < 1 OR VAL(COMMAND$) > 4 THEN      'Get the portnum%π     PRINT "Port number must be on command line"π     ENDπELSE Port% = VAL(COMMAND$)πEND IFπ                   π                    'Setup some special key functionsπCR$ = CHR$(13)πNul$ = CHR$(0)πArrowLt$ = Nul$ + CHR$(75)πArrowRt$ = Nul$ + CHR$(77)πArrowUp$ = Nul$ + CHR$(72)πArrowDn$ = Nul$ + CHR$(80)πEndKey$ = Nul$ + CHR$(79)πEsc$ = CHR$(27)πHome$ = Nul$ + CHR$(71)πSpaceBar$ = CHR$(32)π                   'Save vectors at bios Addresses for Com1-Com2π  OldPort1H = PEEK(&H400)π  OldPort1L = PEEK(&H401)π  OldPort2H = PEEK(&H402)π  OldPort2L = PEEK(&H403)ππ'Move cursor aroundπ'==================================================================πDO                         'This section lets the user moveπ In$ = INKEY$             'move the cursor around on the screenπ SELECT CASE In$          'to the beginning of the phone numberπ  CASE CR$π    IF markit% THEN       'A CR signals the end of the highlightπ     row% = CSRLINπ     Col% = POS(0) - count%π     EXIT DOπ    END IFπ  CASE Esc$                'ENDπ    ENDπ  CASE Home$               'Goto the beginning of the lineπ     LOCATE , 1π  CASE EndKey$             'Goto the end of the lineπ     LOCATE , 80π  CASE ArrowUp$            'UpArrowπ     x% = CSRLINπ     IF x% > 1 THEN LOCATE x% - 1π  CASE ArrowDn$            'DownArrowπ     x% = CSRLINπ     IF x% < 25 THEN LOCATE x% + 1π  CASE ArrowLt$                                 'LeftArrowπ     IF POS(0) > 1 THEN LOCATE , POS(0) - 1π     IF markit% THEN count% = count% - 1       'If markit% then ' ' was pressedπ  CASE ArrowRt$                             'RightArrowπ     π     IF markit% THENπ          count% = count% + 1               'If markit% then ' ' was pressedπ          row% = CSRLIN: Col% = POS(0)π          a% = SCREEN(row%, Col%)π          PRINT CHR$(a%);π     ELSEπ          IF POS(0) < 80 THEN LOCATE , POS(0) + 1π     END IFπ  CASE SpaceBar$π     IF markit% THENπ          count% = count% + 1               'If markit% then ' ' was pressedπ          row% = CSRLIN: Col% = POS(0)π          a% = SCREEN(row%, Col%)π          PRINT CHR$(a%);π     ELSEπ          BEEPπ          markit% = -1                      'Flag set for marking numberπ     END IFπ END SELECTπ LOCATE , , 1                   'Keep cursor flashingπLOOPπ'======================================================================ππ         'Get the phone number off the screenπGetnum row%, Col%, count%, Port%ππ         'Restore old vectorsπCLOSE 1π  DEF SEG = 0π     POKE &H400, OldPort1Hπ     POKE &H401, OldPort1Lπ     POKE &H402, OldPort2Hπ     POKE &H403, OldPort2Lπ  DEF SEGπENDππSUB Getnum (row%, Col%, markit%, Port%)πIF row% < 1 THEN row% = 1: IF Col% < 1 THEN Col% = 1πLOCATE row%, Col%πFOR x% = 0 TO markit%           'Read the phone number off the screenπ     a% = SCREEN(row%, Col% + x%)π     Dialstr$ = Dialstr$ + CHR$(a%)πNEXT x%πLOCATE 23, 25πPRINT "Dialing : "; Dialstr$;πLOCATE 25, 1πPRINT "             Pickup handset and then press space or ESC phone rings      ";πCOLOR 7, 0ππSetup Port%πPRINT #1, "ATM1DT" + Dialstr$     'Dial the numbarππDOπ     b$ = INKEY$π     IF b$ = " " THENπ          Hangup Port%π          EXIT DOπ     END IFπ     IF b$ = CHR$(27) THENπ          Hangup Port%π          EXIT DOπ     END IFπLOOPππEND SUBππSUB Hangup (Port%)ππPRINT "...Disconnecting 1";πSELECT CASE Port%                'Drop DTRπ    CASE 1π        OUT &H3FC, (INP(&H3FC) AND 252)   'com1π    CASE 2π        OUT &H2FC, (INP(&H2FC) AND 252)   'com2π    CASE 3π        OUT &H3FC, (INP(&H3FC) AND 252)   'com3π    CASE 4π        OUT &H2FC, (INP(&H2FC) AND 252)   'com4πEND SELECTπ     PRINT "...2...";π     PRINT #1, "+++";   'Switch to modem command modeπ     SLEEP 1π     PRINT #1, "ATH"    'Send hangup commandπ     PRINT "...CLICK";ππEND SUBππSUB Setup (Port%)π'Sets up the comport by swapping the address fo com4 with com2 andπ'com3 with com1 if necessaryπDEF SEG = 0π POKE &H400, &HF8π POKE &H401, 3π POKE &H402, &HF8π POKE &H403, 2ππSELECT CASE Port%π     CASE 1π        Start$ = "COM1:2400,N,8,1,DS0"π     CASE 2π        Start$ = "COM2:2400,N,8,1,DS0"π     CASE 3π        POKE &H400, &HE8   'For com1 to com3π        POKE &H401, &H3π        Start$ = "COM1:2400,N,8,1,DS0"π     CASE 4π        POKE &H402, &HE8   'For com2 to com4π        POKE &H403, &H2π        Start$ = "COM2:2400,N,8,1,DS0"πEND SELECTπDEF SEGπππOPEN Start$ FOR RANDOM AS 1ππEND SUBππHardin Brothers                MOUSE DEMO                     kwmelvin@nr.infi.net           01-25-96 (00:00)       QB, QBasic, PDS        474  12984    MOUSDEMO.BAS'----------------------------------------------------------------------------π'    FileName:  MOUSEDEMO.BAS for QBasic 1.xπ'      Author:  Hardin Brothersπ' Publication:  _DOS World_ issue #25 January 1996 pp.51-57π' DW Internet:  75300.2361@compuserve.comπ'      DW BBS:  603-924-3181 [8-N-1]π'  DW Address:  DOS World, 86 Elm St., Peterborough, NH 03458  USAπ'    Comments:  To find out what the mouse is doing, your program must "talk"π'            :  to the mouse driver. A mouse and driver must be installedπ'            :  for this program to work. Then your program must make requestsπ'            :  of the mouse driver by calling Interrupt 33 hexadecimal. (Anπ'            :  Interrupt is similar to a CALL or GOSUB in QBasic, but insteadπ'            :  of working within a program, it lets one program call another,π'            :  without worrying about where the second program is in memory.π'            :π' Essential Mouse Servicesπ' Procedure  :  Purposeπ'------------:---------------------------------------------------------------π'   MouseCall:  Calls mouse and passes it a command via CPU registers.π'            :π'    MouseInt:  Initializes mouse and reports number of buttons. Returns 0π'            :  if mouse driver unavailable or mouse not present.π'            :π'  MouseSetup:  Sets up mouse machine-language routine. You must call thisπ'            :  subprocedure before calling any other service!π' -----------:---------------------------------------------------------------π' Optional Mouse Services   π' Procedure  :  Purposeπ' -----------:---------------------------------------------------------------π'   MouseShow:  Displays mouse cursor.π'            :π'   MouseHide:  Hides mouse cursor. To avoid appearance of "ghost" cursors,π'            :  use this service before printing or updating screen.π'            :π' MouseGetPr_:  Gets information about last mouse click. Shows which buttonπ'essInfo     :  is down, number of clicks since last call, vertical andπ'            :  horizontal position of cursor at last mouse click.π'            :π' MouseGetRe_:  Gets information about last release of mouse buttons. Useπ'leaseInfo   :  MouseGetPressInfo and MouseGetReleaseInfo together to letπ'            :  user drag objects around screen.π'            :π' MouseGetSt_:  Gets information on current status of mouse.π'atus        :π' MouseReadC_:  Returns horizontal and vertical position of mouse cursor,π'ounters     :  relative to its location last time function called.π'            :π' MouseSetHo_:  Restricts mouse movement by setting minimum and maximumπ'rzRange     :  horizontal range of mouse cursor.π'            :π' MouseSetVe_:  Restricts mouse movement by setting minimum and maximumπ'rtRange     :  vertical range of mouse cursor.π'            :π'MouseSetPosn:  Sets mouse cursor to correspond to values of HPosn% and VPosn%π'            :π'            :π'----------------------------------------------------------------------------πDECLARE SUB Demo3 ()πDECLARE SUB Demo2 ()πDECLARE SUB Demo1 ()πDECLARE FUNCTION MouseInit% ()πDECLARE SUB MouseCall ()πDECLARE SUB MouseGetPressInfo (LBtn%, RBtn%, MBtn%, Count%, HPosn%, VPosn%)πDECLARE SUB MouseGetReleaseInfo (LBtn%, RBtn%, MBtn%, Count%, HPosn%, VPosn%)πDECLARE SUB MouseGetStatus (LBtn%, RBtn%, MBtn%, HPosn%, VPosn%)πDECLARE SUB MouseHide ()πDECLARE SUB MouseReadCounters (HCount%, VCount%)πDECLARE SUB MouseSetHorizRange (HMin%, HMax%)πDECLARE SUB MouseSetPosn (HPosn%, VPosn%)πDECLARE SUB MouseSetup ()πDECLARE SUB MouseSetVertRange (VMin%, VMax%)πDECLARE SUB MouseShow ()ππMouseInt:π' Machine language routine 40 bytes long:πDATA 55          : 'PUSH BPπDATA 89, E5      : 'MOV  BP, SPπDATA 56          : 'PUSH SIπDATA 8B, 76, 06  : 'MOV  SI,[BP+6]πDATA 8B, 04      : 'MOV  AX,[SI]πDATA 8B, 5C, 02  : 'MOV  BX,[SI+2]πDATA 8B, 4C, 04  : 'MOV  CX,[SI+4]πDATA 8B, 54, 06  : 'MOV  DX,[SI+6]πDATA 8E, 44, 08  : 'MOV  ES,[SI+8]πDATA CD, 33      : 'INT  33hπDATA 8C, 44, 08  : 'MOV  [SI+8],ESπDATA 89, 54, 06  : 'MOV  [SI+6],DXπDATA 89, 4C, 04  : 'MOV  [SI+4],CXπDATA 89, 5C, 02  : 'MOV  [SI+2],BXπDATA 89, 04      : 'MOV  [SI],AXπDATA 5E          : 'POP     SIπDATA 5D          : 'POP  BPπDATA CB          : 'RETFππTYPE MouseRegsπ  AX AS INTEGERπ  BX AS INTEGERπ  CX AS INTEGERπ  DX AS INTEGERπ  ES AS INTEGERπEND TYPEππDIM SHARED MReg AS MouseRegsπREDIM SHARED MouseRoutine%(0 TO 19)πDIM SHARED MouseReady%πMouseReady% = 0πMouseSetupπMouseReady% = MouseInitππDEFINT A-ZππCLSπTYPE TextMaskπ  Bg AS INTEGERπ  Fg AS INTEGERπ  Char AS INTEGERπ  Mask AS INTEGERπEND TYPEππIF MouseReady% THENπ  Demo1π  Demo2π  Demo3πELSEπ  CLSπ  PRINT "No Mouse available for demonstration"πEND IFπENDππSUB Demo1π'*π'* display the mouseπ'* and its current statusπ'*π  CLSπ  PRINT , , "Press Esc to end"π  PRINT "Mouse has"; MouseReady%; "buttons";π  MouseShowπ  DOπ    CALL MouseGetStatus(L%, R%, M%, Horiz%, Vert%)π    LOCATE 3, 1π    IF L% THEN PRINT "Left Dn";  ELSE PRINT "Left Up";π    IF MouseReady > 2 THENπ      IF M% THEN PRINT " -- Mid Dn";  ELSE PRINT " -- Mid Up";π    END IFπ    IF R% THEN PRINT " -- Right Dn";  ELSE PRINT " -- Right Up";π    LOCATE 4, 1π    PRINT USING "Mouse at column ### and row ###"; Horiz%; Vert%π    Esc$ = INKEY$π  LOOP UNTIL Esc$ = CHR$(27)π  MouseHideπEND SUBππSUB Demo2π  RANDOMIZE TIMERπ  MouseShowπ  DOπ    CLSπ    PRINT "Click left button for new window - right button to end. "π    Top = INT(RND * 15) + 2π    Vert = INT(RND * (22 - Top)) + 3π    Left = INT(RND * 60) + 1π    Horiz = INT(RND * (77 - Left)) + 3π    LOCATE Top, Leftπ    PRINT CHR$(201); STRING$(Horiz, 205); CHR$(187);π    FOR I = 1 TO Vertπ      LOCATE Top + I, Leftπ      PRINT CHR$(186); STRING$(Horiz, 32); CHR$(186);π    NEXT Iπ    LOCATE Top + Vert, Leftπ    PRINT CHR$(200); STRING$(Horiz, 205); CHR$(188);π    CALL MouseSetHorizRange(Left * 8, (Left + Horiz - 1) * 8)π    CALL MouseSetVertRange(Top * 8, (Top + Vert - 2) * 8)πDemo2LP:π  L = 0: R = 1: M = 0π  CALL MouseGetPressInfo(L, R, M, CNT, H, V)π  IF R THENπ    MouseHideπ    EXIT SUBπ  END IFπ  L = 1: R = 0: M = 0π  CALL MouseGetPressInfo(L, R, M, CNT, H, V)π  IF L = 0 THEN GOTO Demo2LPπ  DOπ    CALL MouseGetStatus(L, R, M, H, V)π  LOOP UNTIL (L OR R OR M) = 0πLOOPπEND SUBππSUB Demo3π  CLSπ  PRINT "Press Esc to end"π  PRINT "Use mouse and left button or arrow keys and Enter to select"π  DIM CH$(1 TO 4)π  FOR I = 1 TO 4π    CH$(I) = CHR$(64 + I)π    LOCATE 10 + I, 35π    PRINT "Select "; CH$(I);π  NEXT Iπ  COLOR 0, 7π  LOCATE 11, 35π  PRINT "Select "; CH$(1);π  OldSel = 1π  Hit = 0π  CALL MouseSetHorizRange(34 * 8, 34 * 8)π  CALL MouseSetVertRange(10 * 8, 13 * 8)π  CALL MouseSetPosn(34 * 8, 10 * 8)π  DOπ    CALL MouseGetStatus(L, R, M, H, V)π    Sel = V \ 8 - 9π    Hit = L OR R OR Mπ    K$ = INKEY$π    IF LEN(K$) THENπ      SELECT CASE K$π        CASE CHR$(27)             'Escπ          EXIT SUBπ        CASE CHR$(0) + CHR$(72)   'Up arrowπ          IF Sel > 1 THEN Sel = Sel - 1π        CASE CHR$(0) + CHR$(80)   'Dn arrowπ          IF Sel < 4 THEN Sel = Sel + 1π        CASE CHR$(13)π          Hit = -1π      END SELECTπ    END IFπ    IF Sel <> OldSel THENπ      COLOR 7, 0π      LOCATE 10 + OldSel, 35π      PRINT "Select "; CH$(OldSel);π      COLOR 0, 7π      LOCATE 10 + Sel, 35π      PRINT "Select "; CH$(Sel);π      OldSel = Selπ      IF Sel <> V \ 8 - 9 THENπ        CALL MouseSetPosn(34 * 8, (Sel + 9) * 8)π      END IFπ    END IFπ    IF Hit THENπ    COLOR 7, 0π    LOCATE 25, 1π    PRINT USING "Selected &"; CH$(Sel);π    Hit = 0π  END IFπLOOPπEND SUBππSUB MouseCallπ'*π'* Call mouse using current values in MReg registersπ'*π  DEF SEG = VARSEG(MouseRoutine%(0))π  Addr% = VARPTR(MouseRoutine%(0))π  CALL Absolute(MReg, Addr%)π  DEF SEGπEND SUBππSUB MouseGetPressInfo (LBtn%, RBtn%, MBtn%, Count%, HPosn%, VPosn%)π'*π'* Gets info about last mouse clickπ'* Set LBtn%, RBtn%, or MBtn% <> 0 for button to queryπ'* LBtn%, RBtn%, or MBtn% return 1 to show whichπ'* button is currently down or 0 to show which buttonπ'* is currently upπ'* Count% has count of clicks since last callπ'* HPosn% and VPosn% are horizontal and vertical positionπ'* of cursor at last clickπ'*π  IF MouseReady% THENπ    IF (LBtn% OR RBtn% OR MBtn%) <> 0 THENπ      MReg.AX = 5π      IF LBtn% THEN MReg.BX = 0π      IF RBtn% THEN MReg.BX = 1π      IF MBtn% THEN MReg.BX = 2π      MouseCallπ      LBtn% = MReg.AX AND 1π      RBtn% = (MReg.AX AND 2) \ 2π      MBtn% = (MReg.AX AND 4) \ 4π      Count% = MReg.BXπ      HPosn% = MReg.CXπ      VPosn% = MReg.DXπ    ELSEπ      CALL MouseGetStatus(LBtn%, RBtn%, MBtn%, HPosn%, VPosn%)π      Count% = 0π    END IFπ  ELSEπ    LBtn% = 0: RBtn% = 0: MBtn% = 0π    Count% = 0π    HPosn% = -1: VPosn% = -1π  END IFπEND SUBππSUB MouseGetReleaseInfo (LBtn%, RBtn%, MBtn%, Count%, HPosn%, VPosn%)π'*π'* Gets info about last mouse releaseπ'* Set LBtn%, RBtn%, or MBtn% <> 0 for button queryπ'* LBtn%, RBtn%, or MBtn% return 1 to show whichπ'* button is currently down or 0 to show whichπ'* button is currently upπ'* Count% has count of releases since last callπ'* HPosn% and VPosn% are horizontal and vertical positionπ'* of cursor at last releaseπ'*π  IF MouseReady% THENπ    IF (LBtn% OR RBtn% OR MBtn%) <> 0 THENπ      MReg.AX = 6π      IF LBtn% THEN MReg.BX = 0π      IF RBtn% THEN MReg.BX = 1π      IF MBtn% THEN MReg.BX = 2π      MouseCallπ      LBtn% = MReg.AX AND 1π      RBtn% = (MReg.AX AND 2) \ 2π      MBtn% = (MReg.AX AND 4) \ 4π      Count% = MReg.BXπ      HPosn% = MReg.CXπ      VPosn% = MReg.DXπ    ELSEπ      CALL MouseGetStatus(LBtn%, RBtn%, MBtn%, HPosn%, VPosn%)π      Count% = 0π    END IFπ  ELSEπ    LBtn% = 0: RBtn% = 0: MBtn% = 0π    Count% = 0π    HPosn% = -1: VPosn% = -1π  END IFπEND SUBππSUB MouseGetStatus (LBtn%, RBtn%, MBtn%, HPosn%, VPosn%)π'*π'* Gets current mouse statusπ'* LBtn%, RBtn%, and MBtn% returnπ'* 1 if button is down or 0 if button is upπ'* HPosn% returns horizontal positionπ'* VPosn% returns vertical positionπ'*π  IF MouseReady% THENπ    MReg.AX = 3π    MouseCallπ    LBtn% = MReg.BX AND 1π    RBtn% = (MReg.BX AND 2) \ 2π    MBtn% = (MReg.BX AND 4) \ 4π    HPosn% = MReg.CXπ    VPosn% = MReg.DXπ  ELSEπ    LBtn% = 0: RBtn% = 0: MBtn% = 0π    HPosn% = -1: VPosn% = -1π  END IFπEND SUBππSUB MouseHideπ'*π'* Hide the mouse cursorπ'* Decrement the mouse cursor flagπ'* Cursor hidden if flag <> 0π'* MouseInit sets flag to -1π'*π  IF MouseReady% THENπ    MReg.AX = 2π    MouseCallπ  END IFπEND SUBππFUNCTION MouseInit%π'*π'* Initialize mouse and returnπ'* number of buttonsπ'* Return 0 if mouse driverπ'* unavailable or mouse notπ'* presentπ'*π  DEF SEG = 0π  Sum% = 0π  FOR I% = &H33 * 4 TO &H33 * 4 + 3π    Sum% = Sum% + PEEK(I%)π  NEXT I%π  IF Sum% = 0 THENπ    MouseInit% = 0π    EXIT FUNCTIONπ  END IFπ  MReg.AX = 0π  MouseCallπ  IF MReg.AX = 0 THENπ    MouseInit% = 0π  ELSEπ    MouseInit% = MReg.BXπ  END IFπEND FUNCTIONππSUB MouseReadCounters (HCount%, VCount%)π'*π'* Returns mouse movement relative toπ'* the last time this function was calledπ'* Measurements are in "mickeys". By default,π'* 1 mickey = 1 pixel horizontally andπ'* 2 mickeys = 1 pixel verticallyπ'*π  IF MouseReady% THENπ    MReg.AX = 11π    MouseCallπ    HCount% = MReg.CXπ    VCount% = MReg.DXπ  END IFπEND SUBππSUB MouseSetHorizRange (HMin%, HMax%)π'*π'* Sets the minimum and maximum horizontalπ'* range of the mouse cursor.π'* Moves the cursor inside the range if it'sπ'* outside.π'*π  IF MouseReady% THENπ    MReg.AX = 7π    MReg.CX = HMin%π    MReg.DX = HMax%π    MouseCallπ  END IFπEND SUBππSUB MouseSetPosn (HPosn%, VPosn%)π'*π'* Sets mouse cursor to HPosn and VPosnπ'*π  IF MouseReady% THENπ    MReg.AX = 4π    MReg.CX = HPosn%π    MReg.DX = VPosn%π    MouseCallπ  END IFπEND SUBππSUB MouseSetupπ'*π'* Setup to use mouseπ'* MUST be called beforeπ'* MouseInit or any otherπ'* mouse callsπ'*π  RESTORE MouseIntπ  DEF SEG = VARSEG(MouseRoutine%(0))π  Addr% = VARPTR(MouseRoutine%(0))π  FOR I = 0 TO 39π    READ A$π    POKE Addr% + I, VAL("&H" + A$)π  NEXT Iπ  IF A$ <> "CB" THEN ERROR 255π  DEF SEGπEND SUBππSUB MouseSetVertRange (VMin%, VMax%)π'*π'* Sets the minimum and maximum verticalπ'* range of the mouse cursorπ'* Moves the cursor inside the range if it'sπ'* outsideπ  IF MouseReady% THENπ    MReg.AX = 8π    MReg.CX = VMin%π    MReg.DX = VMax%π    MouseCallπ  END IFπEND SUBππSUB MouseShowπ'*π'* Display the mouse cursorπ'* Increments mouse cursor flagπ'* Cursor is displayed if flag is 0π'* MouseInit sets flag to -1π'*π  IF MouseReady% THENπ    MReg.AX = 1π    MouseCallπ  END IFπEND SUBππJohn Rodgers                   GRAPHICAL MOUSE USAGE          coolfool@flinet.com            03-04-96 (12:55)       QB, QBasic, PDS        402  10589    GRMOUSE.BAS '                         How to use the MOUSE in QBasicπ'                    note# the reusable button and box codeπ'              Mouse calls and code stolen from FIDO QuickBasic Subπ'                              John Rodgersπ'                             Too Cool Foolπ'                           Wizard ProductionsππDECLARE SUB chkInkey ()πDECLARE SUB typeSub ()πDECLARE SUB eye ()πDECLARE SUB review ()πDECLARE SUB getTime ()πDECLARE SUB winSub ()πDECLARE SUB drawButton (x, y, l$)πDECLARE SUB pushButton (x, y)πDECLARE SUB threeDbox (uRow%, uCol%, lRow%, lCol%)πCOMMON SHARED prTime$πCOMMON SHARED a$, text$πCOMMON SHARED row%, col%, rows%, cols%, outvππ'the  following mouse code and calls I stole off FIDO QuickBasic Sub, TCFπDEF SEG = 0πM.seg& = 256& * PEEK(207) + PEEK(206)πM.info% = 256& * PEEK(205) + PEEK(204) + 2ππ' see if a Mouse Driver is loadedπDEF SEG = M.seg&πIF (M.seg& OR (M.info% - 2)) AND PEEK(M.info% - 2) = 207 THENπ COLOR 0, 7π CLSππ SCREEN 11π LOCATE 12, 30π PRINT "Mouse Driver Not Found!"π LOCATE 14, 28π PRINT " Load the Mouse and re-try"π πEND IFπ'CALL absolute(0, 0, 0, 0, M.info%)  'Set Defaultsπ'CALL absolute(1, 0, 0, 0, M.info%)  'Turn on Pointerπ'CALL absolute(2, 0, 0, 0, M.info%)  'Turn off Pointerπ'CALL absolute(3, 0, 0, 0, M.info%)  'Statusπ'CALL absolute(4, 0, col%, row%, M.info%) 'Locate Pointerπ' in text mode Mickey reports 640 x 192π' Divide by 8 to use row and colπ πCALL absolute(0, 0, 0, 0, M.info%)  'Set Defaultπ SCREEN 9πCOLOR 8, 7πCLSπ πCALL absolute(1, 0, 0, 0, M.info%)πCALL absolute(4, 0, col% * 8, row% * 8, M.info%)ππdrawButton 2, 4, "A"πdrawButton 2, 10, "B"                    'draw buttonsπdrawButton 5, 4, "C"πdrawButton 5, 10, "L"πdrawButton 21, 36, "Q"ππthreeDbox 1, 2, 8, 16                   'drawboxesπthreeDbox 1, 20, 8, 60πthreeDbox 5, 61, 8, 79πthreeDbox 9, 27, 20, 79πthreeDbox 21, 22, 23, 34πthreeDbox 21, 1, 23, 19πthreeDbox 21, 42, 23, 54πthreeDbox 21, 57, 23, 71π  rows% = 10π DO                                   'main loopπ getTimeπthreeDbox 1, 2, 8, 16π CALL absolute(3, mbut%, xpos%, ypos%, M.info%)  'check on mouseπ LOCATE 22, 2π PRINT " Row"; (ypos% \ 8) + 1; "  "; "Col"; (xpos% \ 8) + 1π LOCATE 22, 23π PRINT " Button "; mbut%π  LOCATE 22, 59π PRINT "           "π                                                'if buttom pressedπ    'A                                                                                                               π IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 0 THEN : LOCATE 22, 61: COLOR 14: PRINT "Message"π IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 1 THENπ   pushButton 2, 4π  typeSubπ END IFπ   π  IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 0 THENπ   drawButton 2, 4, ""π  END IFπ    'Bπ  IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 0 THEN : LOCATE 22, 59: COLOR 14: PRINT "View Window"π  IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 1 THENπ   pushButton 2, 10π   π   winSubπ  END IFπ  IF (ypos% \ 8) + 1 = 5 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 0 THENπ   drawButton 2, 10, ""π  END IFπ    'Cπ    IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 0 THEN : LOCATE 22, 59: COLOR 14: PRINT "Clear Views"π  IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 1 THENπ   pushButton 5, 4π   π  reviewπ  END IFπ  IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 4 AND (xpos% / 8) + 1 < 8 AND mbut% = 0 THENπ   drawButton 5, 4, ""π  π  END IFπ    'Lπ     IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 0 THEN : LOCATE 22, 59: COLOR 14: PRINT "Show Logo"π  IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 1 THENπ   pushButton 5, 10π   eyeπ  END IFπ  IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 0 THENπ   drawButton 5, 10, ""π π  END IFπ    'Qπ     IF (ypos% \ 8) + 1 = 38 AND (xpos% / 8) + 1 > 36 AND (xpos% / 8) + 1 < 40 AND mbut% = 0 THENπ     LOCATE 6, 62π     COLOR 14π     PRINT "**** Click Q ****"     'this gets printed if the cursor goes across the "Q" buttonπ     LOCATE 7, 62π    PRINT "**** to QUIT ****"π    END IFπ  IF (ypos% \ 8) + 1 = 38 AND (xpos% / 8) + 1 > 36 AND (xpos% / 8) + 1 < 40 AND mbut% = 1 THENπ  outv = 1π  END IFπ  IF (ypos% \ 8) + 1 = 10 AND (xpos% / 8) + 1 > 10 AND (xpos% / 8) + 1 < 14 AND mbut% = 0 THENπ   drawButton 5, 10, ""ππ  END IFπ  a$ = INKEY$π   π ' a$ = "s"π  IF LEN(a$) THEN chkInkey        'keyboard inputπ' LOCATE 7, 62π' PRINT rows%; " "; cols%π LOOP UNTIL outv = 1              'exitπLOCATE 12, 2πCOLOR 8, 0π                                 'bragπPRINT "    Works. Don't it?   "πFOR T = 1 TO 30000πNEXTπFOR T = 1 TO 30000πNEXTππSYSTEMππSUB chkInkey           'controls user inputπ STATIC rows%π IF rows% = 0 AND rows% < 11 THEN rows% = 10π    SELECT CASE a$                                   'inputππ   CASE CHR$(8)   'backspaceπ    IF fields = 4 AND LEN(text$) = 6 THENπ   π      LOCATE rows%, 30 + LEN(text$)π      π      text$ = LEFT$(text$, (LEN(text$) - 1))π     ELSEπ     LOCATE rows%, 30 + LEN(text$)                  'black out entire stringπ     PRINT STRING$(LEN(text$), " ")π    END IFππ     a$ = ""                                  'clear a$π     'ON ERROR GOTO eror:π    IF LEN(text$) - 1 >= 0 THENπ      text$ = LEFT$(text$, LEN(text$) - 1)         'reprint shortened text$π     END IFππ π  CASE CHR$(13)   'carrage returnππ      typeSubπ      eyeπ      winSubππ    rows% = rows% + 1π    text$ = ""π    π  CASE CHR$(27)   'escapeππ     π   outv = 1πEND SELECTπtext$ = text$ + a$πIF LEN(text$) >= 46 THEN BEEP: text$ = LEFT$(text$, 46)π   cols% = 29π   LOCATE rows%, 29πPRINT text$πππEND SUBππSUB drawButton (x, y, l$)π                           'draws a button at x and y with a letter l$πCOLOR 15πLOCATE x, yπPRINT "┌───"πLOCATE x + 1, yπPRINT "│"; " "; l$πLOCATE x + 2, yπPRINT "└"πCOLOR 8πLOCATE x, y + 4πPRINT "┐"πLOCATE x + 1, y + 4πPRINT "│"πLOCATE x + 2, y + 1πPRINT "───┘"πEND SUBππSUB eye                    'draws my logoππLINE (500, 8)-(605, 35), 8, BFπLINE (499, 7)-(606, 36), 4, BπCIRCLE (550, 20), 32, 14, , , 2 / 9πPAINT STEP(0, 0), 14πCIRCLE STEP(0, -1), 11, 8πPAINT STEP(0, 0), 8, 8πCIRCLE STEP(1, 1), 1, 12πSTATIC TπT = T + 1πIF T >= 14 THEN T = 0πCOLOR TππLOCATE 4, 62πPRINT "Wizard Productions"πEND SUBππSUB getTimeππ           'convert SYSTEM time and date to prTime$ and prDate$π                        'for program useπT$ = TIME$πHr = VAL(T$)πIF Hr < 12 THEN Ampm$ = " AM" ELSE Ampm$ = " PM"πIF Hr > 12 THEN Hr = Hr - 12πIF Hr = 0 THEN Hr = 12ππ prgTime$ = STR$(Hr) + RIGHT$(T$, 6) + Ampm$πππ IF Ampm$ = " AM" THEN                        ' convert prgTime$ to 5 charactersππprTime$ = LEFT$(prgTime$, 5) + " AM"                'for AMπ END IFππ IF Ampm$ = " AM" AND VAL(LEFT$(prgTime$, 3)) >= 10 THEN ' convert prgTime$ to 6 charactersπ prTime$ = LEFT$(prgTime$, 6) + " AM"                'for PM after 10π END IFπ IF Ampm$ = " PM" THEN                          ' convert prgTime$ to 5 charactersπprTime$ = LEFT$(prgTime$, 5) + " PM"                 'for PMπ END IFππ IF Ampm$ = " PM" AND VAL(LEFT$(prgTime$, 3)) >= 10 THEN ' convert prgTime$ to 6 charactersπprTime$ = LEFT$(prgTime$, 6) + " PM"               'for PM after 10π END IFππCOLOR 15, 11πLOCATE 22, 43        '  PRINT prTime$πPRINT LTRIM$(prTime$); " "; RIGHT$(TIME$, 2)π   ππ  πππEND SUBππSUB pushButton (x, y)π               'show a double line button at x and yπ                'while mouse button is pressedπ COLOR 8πLOCATE x, yπPRINT "╔═══"πLOCATE x + 1, yπPRINT "║ "πLOCATE x + 2, yπPRINT "╚"πCOLOR 15πLOCATE x, y + 4πPRINT "╗"πLOCATE x + 1, y + 4πPRINT "║"πLOCATE x + 2, y + 1πPRINT "═══╝"ππEND SUBππSUB reviewπVIEWπCLS                     'clears and redraws screen DO NOT DO THISπ                            'very kludgeyπthreeDbox 1, 2, 8, 16πthreeDbox 1, 20, 8, 60πthreeDbox 5, 61, 8, 79πthreeDbox 9, 27, 20, 79πthreeDbox 21, 22, 23, 34πthreeDbox 21, 1, 23, 19πthreeDbox 21, 42, 23, 54πthreeDbox 21, 57, 23, 71πdrawButton 2, 4, "A"πdrawButton 2, 10, "B"πdrawButton 5, 4, "C"πdrawButton 5, 10, "L"πdrawButton 21, 36, "Q"π πEND SUBππSUB threeDbox (uRow%, uCol%, lRow%, lCol%)π COLOR 8π   ' Draw top of box.π  LOCATE uRow%, uCol%: PRINT CHR$(218);π   LOCATE , uCol% + 1: PRINT STRING$(lCol% - uCol%, CHR$(196));π   LOCATE , lCol%: PRINT CHR$(191);ππ   ' Draw body of box.π   FOR i = uRow% + 1 TO lRow% - 1π   COLOR 8π      LOCATE i, uCol%: PRINT CHR$(179);π      COLOR 15π      LOCATE , lCol%: PRINT CHR$(179);π   NEXT iππ   ' Draw bottom of box.π            LOCATE lRow%, uCol%: PRINT CHR$(192);π   LOCATE , uCol% + 1: PRINT STRING$(lCol% - uCol%, CHR$(196));π   LOCATE , lCol%: PRINT CHR$(217);πππEND SUBππSUB typeSub            'types a message to the screen with an annoying noiseπSTATIC T, eπT = T + 1πIF T >= 14 THEN T = 0πCOLOR Tπ πa$ = "This is a demonstration of the "        'define stringsπb$ = "possibilities of mouse support when"πc$ = " added to programs in MS QBasic"πd$ = "Too Cool Fool"πFOR w = 1 TO LEN(a$)                'print each string one letter at a timeπSOUND 200, .1                           'annoying noiseπLOCATE 3, 25πPRINT LEFT$(a$, w)πFOR q = 1 TO 500πNEXT q                                  'lousy way to do this but I wasπNEXT                                      'havin' funπFOR w = 1 TO LEN(b$)πSOUND 200, .1πLOCATE 4, 23πPRINT LEFT$(b$, w)πFOR q = 1 TO 500πNEXT qπNEXTπFOR w = 1 TO LEN(c$)πSOUND 200, .1πLOCATE 5, 24πPRINT LEFT$(c$, w)πFOR q = 1 TO 500πNEXT qπNEXTπCOLOR 14πSOUND 440, 1πFOR w = 1 TO LEN(d$)πSOUND 240 + w, 1ππLOCATE 6, 33πPRINT LEFT$(d$, w)πFOR q = 1 TO 500πNEXT qπNEXTπππEND SUBππSUB winSubπSTATIC a                       'another pointless subπa = a + 1πIF a >= 16 THEN a = 1πVIEW (10, 130)-(195, 270), a, 9πLOCATE 11, 2πCOLOR a, aπ πPRINT " This is a view window  "πwinText$ = text$πIF LEN(text$) >= 24 THENπwinText$ = LEFT$(text$, 24) + CHR$(13) + MID$(text$, 25, (LEN(text$) - 24))πEND IFπLOCATE 12, 2πPRINT winText$πFOR T = 1 TO 300πNEXT TπEND SUBππBrian Roche                    GRAPHICAL MOUSE CURSORS DEMO   FidoNet QUIK_BAS Echo          03-08-96 (00:13)       QB, PDS, VBDOS         361  12931    MEESES.BAS  'π'           M e e s e s  .  B a s      from B. Rocheπ'π'              Demonstrates Graphical Mouse Cursorsπ'             Translated over from VBDOS Programπ'     Make sure to enter Environment with /L for Interrupt Supportππ'   Currently set up to run *AS IS* in QB ..REM/UNREM the appropriateπ'                   spots to use Far Strings ..ππ'    Multiple Versions of some Cursors are given because some lookπ'          Better on White BG, some better on Black BGπππDECLARE FUNCTION HaveMouse% ()      ' Checks to See if Driver InstalledπDECLARE SUB PrintR (A$, X%, Y%, StepX%, StepY%, CO%, BackGround%, Shadow%)π        ' Prints Text in Graphics Mode 12πDECLARE SUB ChangeCursor (A$)       ' Changes Graphics Mouse CursorπDECLARE SUB Mouse (M0, M1, M2, M3)  ' Mouse DriverπDECLARE SUB MouseShow ()            ' Displays Mouse CursorπDECLARE SUB MouseHide ()            ' Hides Mouse Cursorπππ ' $INCLUDE: 'QB.BI'         ' Use for QB45 (Keep at least One REM here!)π REM '$INCLUDE: 'VBDOS.BI'π ' Use 'VBDOS.BI' for VBDOS, 'QBX.BI' for PDSππDIM Regs AS RegType          ' Interrupt needed for Regular Mouse Routines,π                             ' QB also uses Interrupt for Mouseπ                             ' Cursor RoutinesπREM 'DIM RegsX AS RegTypeX   ' InterruptX needed for PDS/VBDOSπ                             ' Far Strings, but both Interrupt callsπ                             ' Still needed for QBX/VBDOSπππON ERROR GOTO NOVGA:         ' Make sure we've got VGA ..π SCREEN 12πON ERROR GOTO 0ππ  ' Now Blank the Monitor while Drawing the Screen ..π  OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% OR &H20π  LINE (0, 0)-(640, 480), 7, BF     ' Use a White backGroundπ  LINE (320, 20)-(600, 305), 0, BF  ' Black "Window" to also check Cursorsππ ' Yeah, I know using DATA statements is not an example ofπ ' Programming Virtuosity, but this is just Demo code ...π FOR I% = 1 TO 14π  READ Prompt$π  Prompt$ = CHR$(I% + 64) + ") " + Prompt$π  PrintR Prompt$, 25, I% * 20 + 5, 8, 0, 15, 7, 1π NEXTππ Prompt$ = "Q) Quit program."π PrintR Prompt$, 25, 305, 8, 0, 15, 7, 1ππ Prompt$ = "Press the Letter of the Cursor you want, or <Q> to Quit."π PrintR Prompt$, 45, 400, 8, 0, 11, 7, 1π Prompt$ = ""πππ  ' Now that the screen is Drawn, Turn the Screen back on..π  OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% AND &HDFππ  ' And Check for the Rodent ...π IF HaveMouse% THEN               ' Check For Mouse Driverπ   Mouse 0, 0, 0, 0               ' Initialize Mouseπ   MouseShow                      ' Show Mouse Cursorπ ELSEπ   SCREEN 0π   LOCATE 15, 28: PRINT "You need a Mouse for a Mouse Cursor Program, Silly!"π   WHILE INKEY$ = "": WENDπ   SYSTEMπ END IFπππ ' Now Run a Loop, Checking Input, and Change the Mouse Cursor accordingly ..π  DOπ    DO: A$ = INKEY$: LOOP UNTIL LEN(A$)π    A$ = UCASE$(A$)π    IF A$ = "Q" THENπ      MouseHideπ      SCREEN 0, , 0, 0: SYSTEMπ    END IFπ    IF A$ >= "A" AND A$ <= "N" THEN ChangeCursor A$π  LOOPπππNOVGA:    ' VGA Error Trapπ  SCREEN 0, , 0, 0π  LOCATE 15, 25: PRINT "You Must have a VGA to run this program"π  SYSTEMπππ' Menu Data ...πDATA "Bulls Eye Cursor #1","Bulls Eye Cursor #2"πDATA "Hour Glass Cursor #1","Hour Glass Cursor #2"πDATA "Hour Glass Cursor #3", "Hour Glass Cursor #4"πDATA "Hour Glass Cursor #5","Stop Watch Cursor"πDATA "Smiley Face Cursor", "Smiley Face Cursor #2"πDATA "Cross Hair Cursor", "Cross Hair Cursor #2"πDATA "Pointing Hand Cursor","Pointing Hand Cursor #2"πππ'---------------- Start of Mouse Cursor Data ----------------πBullsEye1:πDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&H8001,&H8001,&H8001,&H8FF1,&H8811,&H8811,&H8811πDATA &H8811,&H8811,&H8811,&H8FF1,&H8001,&H8001,&H8001,&HFFFFπDATA 7,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πBullsEye2:πDATA &H0,&H0,&H0,&H0,&HFF0,&HFF0,&HFF0,&HFF0πDATA &HFF0,&HFF0,&HFF0,&HFF0,&H0,&H0,&H0,&H0πDATA &H0,&H7FFE,&H7FFE,&H6006,&H6006,&H6006,&H6006,&H6006πDATA &H6006,&H6006,&H6006,&H6006,&H6006,&H7FFE,&H7FFE,&H0πDATA 7,8π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHourGlass1:πDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&H2004,&H2004,&H2004,&H1008,&H990,&H420,&H240πDATA &H240,&H420,&H810,&H1008,&H2084,&H2144,&H22A4,&HFFFFπDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHourGlass2:πDATA &H0,&HDFFB,&HDFFB,&HDFFB,&HEFF7,&HF66F,&HFBDF,&HFDBFπDATA &HFDBF,&HFBDF,&HF7EF,&HEFF7,&HDF7B,&HDE3B,&HDC1B,&H0πDATA &H0,&H0,&H0,&H0,&H0,&H0,&H0,&H0πDATA &H0,&H0,&H0,&H0,&H0,&H0,&H0,&H0πDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHourGlass3:πDATA &H0,&HC003,&HC003,&HC003,&HE007,&HF00F,&HF81F,&HFC3FπDATA &HFC3F,&HF81F,&HF00F,&HE007,&HC003,&HC003,&HC003,&H0πDATA &H400,&H1FF8,&H1FF8,&H1FF8,&HC30,&H660,&H3C0,&H180πDATA &H180,&H3C0,&H7E0,&HFF0,&H1E78,&H1C38,&H1818,&H0πDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHourGlass4:πDATA &H0,&H8001,&H8001,&H8001,&HA185,&HB00D,&HB81D,&HBC3DπDATA &HBC3D,&HB81D,&HB00D,&HA005,&H8181,&H83C1,&H87E1,&H0πDATA &H0,&H1FF8,&H1FF8,&H1FF8,&HC30,&H660,&H3C0,&H180πDATA &H180,&H3C0,&H7E0,&HFF0,&H1E78,&H1DB8,&H1FF8,&H0πDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πStopWatch:πDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &H3000,&H63E0,&HDC18,&H1004,&H2002,&H2602,&H4301,&H4181πDATA &H40C1,&H4081,&H4081,&H2082,&H2082,&H1004,&HC18,&H3E0πDATA 1 ,1π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πSmiley1:πDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HE70,&H1FE8,&H3C3C,&H381C,&H6006,&H8422,&H8421,&H8001πDATA &H8181,&H9011,&H4822,&H43C2,&H2004,&H100C,&H399C,&H700EπDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πSmiley2:πDATA &HE70,&H1FE8,&H3C3C,&H381C,&H6006,&H8422,&H8421,&H8421πDATA &H8001,&H9191,&H4812,&H4422,&H23C4,&H1008,&H399C,&H700EπDATA &HF18F,&HE017,&HC3C3,&HC7E3,&H9FF9,&H7BDD,&H7BDE,&H7BDEπDATA &H7FFE,&H6E6E,&HB7ED,&HBBDD,&HDC3B,&HEFF7,&HC663,&H8FF1πDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πCrossHair1:πDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFFπDATA &H100,&H100,&H100,&H100,&H100,&H100,&H100,&H100πDATA &HFFFE,&H100,&H100,&H100,&H100,&H100,&H100,&H100πDATA 7 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πCrossHair2:πDATA &HFFFF,&HFC7F,&HFC7F,&HFC7F,&HFC7F,&HFC7F,&HFC7F,&H1πDATA &H101,&H1,&HFC7F,&HFC7F,&HFC7F,&HFC7F,&HFC7F,&HFC7FπDATA &H0,&H0,&H100,&H100,&H100,&H100,&H100,&H0πDATA &H7C7C,&H0,&H100,&H100,&H100,&H100,&H100,&H0πDATA 7 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHand1:πDATA &HF3FF,&HEDFF,&HEDFF,&HEC7F,&HED8F,&HEDB1,&HEDB6,&H8DB6πDATA &H6DB6,&H6FFE,&H6FFE,&H7FFE,&H7FFE,&H7FFE,&HBFFD,&HC003πDATA &HC00,&H1200,&H1200,&H1380,&H1270,&H124E,&H1249,&H7249πDATA &H9249,&H9001,&H9001,&H8001,&H8001,&H8001,&H4002,&H3FFCπDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππ'---------------- Start of Mouse Cursor Data ----------------πHand2:πDATA &HF3FF,&HE1FF,&HE1FF,&HE07F,&HE00F,&HE001,&HE000,&H8000πDATA &H0,&H0,&H0,&H0,&H0,&H0,&H8001,&HC003πDATA &H0,&HC00,&HC00,&HC00,&HD80,&HDB0,&HDB6,&HDB6πDATA &H6DB6,&H6FFE,&H6FFE,&H7FFE,&H7FFE,&H7FFE,&H3FFC,&H0πDATA 5 ,0π'------------------ End of Mouse Cursor Data ------------------ππSUB ChangeCursor (A$)π  DIM Regs AS RegType          ' Use for QB45 Near Stringsπ  REM DIM Regs as RegTypeX     ' Use for QBX/VBDOS Far Stringsππ  ' Assigns Custom Cursor Shape Depending on String Passed.π  ' Use RegType in QB; need ES Register for PDS/VBDOS Far String support.ππ  SELECT CASE A$π  CASE "A"π     RESTORE BullsEye1:π  CASE "B"π     RESTORE BullsEye2:π  CASE "C"π     RESTORE HourGlass1:π  CASE "D"π     RESTORE HourGlass2:π  CASE "E"π     RESTORE HourGlass3:π  CASE "F"π     RESTORE HourGlass4:π  CASE "G"π     RESTORE HourGlass4:π  CASE "H"π     RESTORE StopWatch:π  CASE "I"π     RESTORE Smiley1:π  CASE "J"π     RESTORE Smiley2:π  CASE "K"π     RESTORE CrossHair1:π  CASE "L"π     RESTORE CrossHair2:π  CASE "M"π     RESTORE Hand1:π  CASE "N"π     RESTORE Hand2:π  CASE "Q:"π     SCREEN 0, , 0, 0π     CLS : SYSTEMπ  CASE ELSEπ     EXIT SUBπ  END SELECTππ  '====================================================================π  ' Below is the part you're most interested in. I read it in as aπ  ' String * 1 (BYTE) .. 16 Bytes for the Cursor Mask, 16 Bytes forπ  ' the Screen Mask, and the last two Integers the location of the Cursorπ  ' Hot Spot - the Point actually referenced in Mouse Coordinates.ππ  ' Read in Graphical Mouse Cursor Dataπ  FOR I% = 1 TO 32π    READ Wrd%π    MMsk$ = MMsk$ + MKI$(Wrd%)         ' Cursor Graphical Dataπ  NEXT I%π  READ Hotx, Hoty                      ' Cursor HotSpotππ  ' Now For the Interrupt call ..π  ' Use Function 9 from Int 33 ..π  Regs.ax = 9: Regs.bx = Hotx: Regs.cx = Hotyπ  Regs.dx = SADD(MMsk$)   ' Use with ALL Basics ..ππ  ' Next Line not needed for QB, (Optional for PDS ??), needed for VBDOSπ  ' But using it stores Data as a Far String.π  REM Regs.es = SSEG(MMsk$)  ' Need InterruptX for this One ..ππ  INTERRUPT &H33, Regs, Regs        ' Call QB45 Near string Interruptπ  REM INTERRUPTX &H33, Regs,Regs    ' Call VBDOS/PDS Far String InterruptπEND SUBππFUNCTION HaveMouse%π  ' Checks to see if Mouse is Installedπ  DEF SEG = 0π  MouseSegment& = 256& * PEEK(207) + PEEK(206)π  MouseOffset& = 256& * PEEK(205) + PEEK(204)ππ  DEF SEG = MouseSegment&π  IF (MouseSegment& = 0 AND MouseOffset& = 0) OR PEEK(MouseOffset&) = 207 THENπ    HaveMouse% = 0π  ELSEπ    HaveMouse% = 1π  END IFπ  DEF SEGπEND FUNCTIONππSUB Mouse (M0, M1, M2, M3) STATICπ  ' Note: VBDOS will move the "STATIC" in front of this SUB Name.π  ' If you then go back into QB, you'll have to manually put the "STATIC"π  ' back at the end of the Sub Declaration, or generate an Error.ππ  ' M0 = 0 : Initialize the Rodentπ  '      1 - Show Mouseπ  '      2 - Hide Mouseπ  '      3 - Mouse Location/Button Statusππ  DIM Regs AS RegType           ' Use for ALL Basic's ..π  ' Calls interrupt &H33 to invoke mouse functions in the MS Mouse Driver.ππ  Regs.ax = M0: Regs.bx = M1: Regs.cx = M2: Regs.dx = M3π  INTERRUPT &H33, Regs, Regs              ' Use for ALL Basic's ..π  M0 = Regs.ax: M1 = Regs.bx: M2 = Regs.cx: M3 = Regs.dxπEND SUBππSUB MouseHide                   ' Hides Mouse cursorπ  Mouse 2, 0, 0, 0πEND SUBππSUB MouseShow                   ' Shows mouse Cursorπ  Mouse 1, 0, 0, 0πEND SUBππSUB PrintR (A$, X%, Y%, StepX%, StepY%, CO%, BackGround%, Shadow%)π  ' Prints Graphical Chars from Rom Data Tableπ  ' A$ Param is string to printπ  ' X%=Graphics Horz pixel Positionπ  ' Y%=Graphics Vert pixel Positionπ  ' StepX% and StepY% control size of charsπ  ' CO%= Foreground colorπ  ' BackGround%= BackGround Colorπ  ' Shadow% is a Boolean for Shadow enablingππ  ExtX% = StepX%: ExtY% = StepY%π  DEF SEG = &HFFA6        ' ROM Segment for Character Shape Tablesπ  FOR I% = 1 TO LEN(A$)π    Addr% = 8 * ASC(MID$(A$, I%)) + 14     'Address character shape tableπ    IF BackGround% THEN                    'Color backgroundπ    IF BackGround% = 256 THEN BG% = FALSE ELSE BG% = BackGround%π    IF I% = LEN(A$) THEN ExtX% = FALSE: ExtY% = FALSEπ    LINE (X%, Y%)-(X% + 7 + ExtX%, Y% + 7 + ExtY%), BG%, BFπ    END IFπ    FOR J% = 0 TO 7π    Mask% = PEEK(Addr% + J%) * 128π    IF Shadow% THENπ    LINE (X% + 9, Y% + J% + 2)-(X% + 2, Y% + J% + 2), 0, , Mask%π    END IFπ   LINE (X% + 7, Y% + J%)-(X%, Y% + J%), CO%, , Mask%π  NEXTπ  X% = X% + ExtX%π  Y% = Y% + ExtY%π  NEXTπ  DEF SEG                 'Back to DGROUPπEND SUBπDave Shea                      PSYCHADELIC ELVIS MOUSEBOY     FidoNet QUIK_BAS Echo          03-09-96 (13:45)       QB, PDS                69   2557     ELVIS.BAS   'Psychadelic Elvis MouseBoy - By Dave Sheaππ'This is a little demonstation to show you how to customize your mouseπ'cursor. Alter it, use it, destroy it, do whatever you want with it. Justπ'remember to credit me at least a little bit, eh? Just remember you're usingπ'this at your own risk... If it radiates your cat, don't blame me....ππ'These following lines initiate the mouse setup. Sorry, can't remember whatπ'everything does... :(ππ'$INCLUDE: 'qb.bi'πDIM Cursor%(1000): DIM MaskCursor%(1000): DIM Back%(1000)πDIM inreg AS RegType: DIM outreg AS RegType: inreg.ax = 0πCALL INTERRUPT(&H33, inreg, outreg)πhmin% = 1: hmax% = 290: inreg.cx = hmin%: inreg.dx = hmax%: inreg.ax = 7πCALL INTERRUPT(&H33, inreg, outreg)πvmin% = 1: vmax% = 170:  inreg.cx = vmin%: inreg.dx = vmax%: inreg.ax = 8πCALL INTERRUPT(&H33, inreg, outreg)πinreg.cx = 0: inreg.dx = 0: inreg.ax = 4πCALL INTERRUPT(&H33, inreg, outreg)πππCLS : SCREEN 13                           'I sure as heck hope I don't needπDEFINT A-B                                'to explain THIS....ππ'This draws & GETS my funky Elvis look-alikeππPSET (16, 7)πDRAW "c161nr2dnrlnd2rdc66rc1dc66nrl1drgdc15nenhr3c66rlc15l3"πDRAW "l3c66lrc15r3dnrnldnrnld"πDRAW "c16nrnlc44dc1nrld3c161nluc1u2r2d3c161nr "πGET (5, 4)-(28, 24), Cursor%ππ'This draws & GETS a mask of my funky Elvis look-alikeπ'This is vital, as creating a mask will allow you to place the cursor overπ'a background without totally destroying it.ππFOR a = 1 TO 30π FOR B = 1 TO 30π  IF POINT(a, B) = 0 THEN PSET (a, B), 255π  IF POINT(a, B) <> 0 AND POINT(a, B) <> 255 THEN PSET (a, B), 0π NEXTπNEXTπGET (5, 4)-(28, 24), MaskCursor%ππCLSπx = 160: y = 100πFOR a = 1 TO 200                     'Shnazzy Background setup-sequenceπ LINE (1, a)-(320, a), aπNEXTππmouseloop:πGET ((x - 1) / 2, y)-((x - 1) / 2 + 25, y + 25), Back% 'Get temp backgroundπPUT ((x - 1) / 2, y), MaskCursor%, AND                 'Lay down the maskπPUT ((x - 1) / 2, y), Cursor%, XOR                     'Overlap with ElvisπWAIT 986, 8                                            'Vertical retraceπPUT ((x - 1) / 2, y), Back%, PSET                      'Restore BackGroundππ'get mouse location and statusπ'if outreg.bx=1 then left button is pushedπ'if outreg.bx=2 then right button is pushedπ'if outreg.bx=3 then both buttons have been pushedπinreg.ax = 3πCALL INTERRUPT(&H33, inreg, outreg)πx = outreg.cx + 1πy = outreg.dx + 1πIF outreg.bx = 1 THEN PSET ((x - 1) / 2, y), 4πIF outreg.bx = 3 THEN ENDπGOTO mouseloopπDave Shea                      ANIMATED MOUSE CURSOR          FidoNet QUIK_BAS Echo          03-30-96 (00:00)       QB, PDS                46   2849     MOUSANIM.BAS'Well, I sat down and wrote me a program that'll give you an animatedπ'mouse cursor.ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"MOUSANIM.ZIP",4^6:Z&=1787:?STRING$(50,177);πU"%up()%9%%%I-%[L8PE*T=Ea0(7%%)2%%%1%%%%rt%zxjf%srSgRfx&%;<>Sms5wπU"7KEwVvCUN?$scWn#*&io)qARi%P>r4([c1:O*Cx;]Au8wo>:I:Pu&_GIYZle\6oπU"?$,,,=uV=2DV^brHT?H0i_[#s=n5wb/]h$fc3rg\?+SE93xH#%&VU?sdsib6WaiπU"?[5<%3a4Lp1kT:7KZ])NA80t*Y02_mWbfc=V42#lC\+a)BeDLH7)/$+4f9aARUYπU"C6t_#jO/kpQu-WXm*cUZ**l8F$tv'O;cRBd-qXpHK,[OP*S>rP75>960_d:Sj=9πU"2S>m47r0w'aBw)cq7//'>i-&%NMcHbCpTry/;w0xJdrz;))0#OWTw+\a/TyRM5dπU"<%rQeC/hy;z;T/z/,b4T:/c<Q=n]#x-Z5efPd:+yd=1&VQb>3iO'4=m0WUC[u5SπU"ofQ1nZ_qp'W-KX.CtOqlR+91G.7WAP6MzQh[,r:Vr\5N;K[]dixl+$SqLHwYDJ.πU"6uM4abLX9-C0v>DTcG>>.7TsG>9nTG:pkbGI3lL>db\CHa8S&=putb7P&f,[sHOπU"J8CJ5U\m6uPfmbqbK(&R*^xS/2?j;K)?U%w+IkM\VCbCj;VZ/A-a*cEkEX\3=n.πU"rd/#4tb2VGb?A7pZ6bm#?[lm2:rA-GqneI\iVFn'?\xKIC4%5u_j36%*\WnSkn\πU"S8jcZ5)T\K60TSWKk.l7cbE+_-2Kg6$\u<ooMG3Qp<_rDCHgPx;XFxR;xg5vkC$πU"ofy/<8sKc1bdfzUU^Y(leoK,cGKZu=#$D]DPK>deAxAI=pjnwt;l]Q+GaOrM.+[πU"EnSbSU0::_;nK+c;IPl-ZG%X6\F&&P5NibvBmt=tD^'rF$#4^o+1ckSt:M$LlJIπU"ay+]s/i-7YX8%)$23H8ga7,dxk\?T2ZD1C/Hq5'ITnP?Sm1[Fb%r:N.xq<+AP[3πU"n:#.S2Uq<CBP[4:Yj.Su_q<BPK/3:*Q.Seqn<DP/p4:T.lS/qf4APE3n:$.Sq]qπU"VwZY5TYcoF,hoprbe2K?r5n,zxFoJa4>_XI[B#lBs[cwg1=YLRd7<IEDDM&;Z+WπU"QN$ctd=eK-=06k124Y7B_C#r0k'dHTuNCZa&7o$IfCvXo1V,[r?;=X2ZxJBEg=.πU"nTd.%qKh^Sj:a6]]_Rfr/&[;zSkdUDuc-ubRb_]UFAf*\R54)\ES[=5N^kHj\N=πU"ZQB8ZUlBaDh=607hZ'e1*MDqTZD*ZhjcLa#,G5\,[=v%4up(%)9%%#%-%^\SxERπU"H95]?%'%%,'s%%,%%%%r%fsSfmsrfT;,ASU#9+u<c=9Sk[ORN%qw:b+O_Lhinn+πU"B\'dEq(aY$a_p#(k#kDisL-XbloEb&'-9S[mBSr#sZ_R>=nuLXvsZTh<LJmdIKPπU"NtLXroHwaF>sP>ZNjSRCdLYEY*F_2GmX7N]3tDfp<%bheyMkSTdl,.36uH&P9pHπU"TpMK-(u(/X#;ik#8J;Tn?H6HNiXb;Vr9-RDvhm^iPNX:*>Vi,N.dcCp3,+.tc(kπU"x)ve+wXgA8Fo2u+FVJEZQfc<[9DI?cPo\u8H*86cjgqswIsjD$YCku>r4sMEvzAπU"fh*v0lU()l7[/?JJ];%Lm7jNWPE:ta6[JkkKvS:EQ4qCFk^?3pA4v>r9utt#,]vπU"BsR6Y**tW[w[t75TVIXit\9sBP1p^^X8ff0%,KHF[rlap.G?Zh8w=stFkbxCSJ#πU"5l0z9GtvgdyDrXKoaLNL\nHN<Rk;Trb>u?^.i=C$b4HH1cXVMca(Aog/q8.fvK:πU"_FoSQ[i_ulEsPtT/=B.vZ^BLi<qHj1SERacZ=3N_$<oFrcH($T[*??xLM<NjpJMπU"bwr?j#<UoEi$+:S(tKm<i<*'SMO0Lv8rMrZib:HvvyNrsJ7wP=sFy'xZ'%R%%YDπU"ouqahGPvN?V,Ls*D&n+&$/vclcpQ&M?Y3s7D:UtN=+i:8Yw:Tz?LYs/78P#tqT:πU"CL'Zboqo%=9=N3v&RZvffDZ1+=uf:inj;N58Lump)s$mvdvfbtNaptN(^3v,L%%πU"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%n'q(up%&'9%%9%%πU"%I-%[L8PE*T=Ea0(7%%)2%%%1%%%%%%%%%&%%E%%%%%%%%%rtzx%jfsr%Sgfx%uπU"p&'%9%9%%%%-%)^SxE?R95]&?'%%+,s%%%,%%%%%%%%%%%E%7%%Z(%%%rf%sSfsπU"%rup*%+%%%%%'%'(%>%%(%E+%%%%%πEND SUBπCLOSE:IF S=168AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπJamshid Khoshrangi             LALEH'S MOUSE ROUTINES V2.0    qjackson@direct.ca             04-08-96 (19:03)       PB                     394  26098    LMR.BAS     ' Please run this code under PowerBASIC to extract LMR_200.ZIPπ' To extract under QB, add a DIM before SHAREDπDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"LMR_200.ZIP",4^6:Z&=19247:?STRING$(50,177);πU"%up()%9%%%I-%Cg8WE\z7p+ANd%%A0%%%0%%%%qr(w.WU%USgfjxfLfYA\A$$YNπU"lEI$yC[e>IjFPds:I0_kEuIII#V1G8Ow\zB#Z5OAq-7\-i%Uu9rpfgGEhQxrV.5πU"1p83khnP%#g&IJQe.>>g9E^=ZCCCyuCCC(^oMb5e/L.vi[z.)r6Nw\sT^HGX3xjπU"f9xxw4YNv0lu9xo(YNwpNovXYv?DxW2cEKyvo38qHlxd&xolT[$iX^Yn,#tylk0πU"E&Xc]e_Vr_krbE/W7ml,#&VTOZs_7jj:8YExEMN0\aSNFm2m$*N3$GnkY8-eRt\πU"rH(m)XOQbFlX6RWoLUDrLK\rkX*b+G#/XsJj,bi,kH3-lVs/p#D)q\$]57IiQkLπU";bD506tgnVTB,q;6S9;r:<M;ht:roVW[mVq_^bn6a$ZdtqhY\;]07#cid)C'n+=πU"eWl],LcO_>K7]>jTtKH,)4(J96]_.U#DRV-$)M_sQA3FYZQT;5G+Wcr,BokCJJVπU"*,#22<*T338*B.M?(+0&xM+>1-F7qb,hq*m^dJQJN[b&YeomRt$iWgLp/%&\LmXπU"tp1<BHGKK\dGFN<(FIqMR,uBS#4UO<q*NjWi'Yb,+<NuG59HW(v<$r#=?<^>JV3πU"*opX[pq>Qt>bph)2m*>a(83rSaSY(XknqA/qr$q)EuGWlj2(V8Np/Vv&m\MdB3=πU"rIZ+dMnZm6:\ThFe?TUDVc=i6at??:%\VmDHV]1S((=dcrJ9.\$QlY>\pI-qACkπU"+.+Ut[t,ZS31Ff)(gQK,Xp^O,0wE;Z\u\<k>=QfGL9D'(T/DKiwo20prZEV]_J0πU"K8E181o#XhK0l*D<r^.%pukpiP+T(L\tPPn6N9jDVr)U_Ht(rxxMEDAqFFt\MsUπU"j4:6N]R8lkMU5%?3aLB]P2H_(]BEkI,j94bs:2[.yo5KL.TeD_>1k3LA)f1^zZnπU"=Bk&&$bJH(k&w=9joAF?Ea&8NZqtBGfO#DH7L\\f7eE8ZCE>bNF[e#?=?k6&hHHπU"#Pff,MpnKYbxV7\wlm&^lgTM'M5oMH4R:#C(LW90VMs^qElI(/H=KYA]6uVY_UYπU"nUEUt2H=RrP_W1nFck3px>Unr'>cdO^I_RG0Y+d__mVsZn)xr-p*$BiWHr'fXP8πU"'#ETO-)i[,hegt>Mhl++Q%]tt1;kRlvL<^>FkE^J:^:TI5Emp\DCs-giT5Yi>S$πU"lDMr,XX4fm-3>mpfhOJze:zPCs]m017^(e'gi59M#Fa/N1r8RoJ]J,RG/7eu[lrπU"X)K]t]9#,<6RiE]it'r,;6mF;BA?THE7NXli:%i5,CS\t**.wL>fJ?^IUk>R3m9πU"+\3i>h0uk;_]L?oSKLjG8AsVtIl;tG%hhmike#*fn5GFM#.0WMIJnsNdSpE.P1?πU"gOl(4]B)[+nA\iSM(ets\ouWs-tQ)tu-4gNVD>VQweuS'gtKc[/L.rrG+t91TpRπU"DBNVj8#GFR8I\AGb?gn=5oo7K]6IY5_GlqX>+es)7Kk$BCDHRq5*:CWXt#oEl6JπU"hJH=4>#=Q3VIP\Ua\H7,eGQIu.8A2wOm2&>b&kal(]mby$4SPG]qU-l5\?.rL?_πU"]^S.ABPL+lQ.vx?B7cZ6XY1f\QtWoz3-Y9\h.*FeYVZ%NU*SEU9\p\kqI<kVe?aπU"3.[D.nrk=o#ckDH:p'/h#eZA9lVH6J3<I%FV2$Y$BS#%gsRe&rr8mVF(5g4rAcrπU"V8(xG2HD'lS9&8d%Eumq7tcG/m\+M;&f5=1K$tNs,eu\cEL%:RxyE&.&TYM,HABπU"%p9Lg;e?#4>U[[t88iRc%noTk[:a[\r%?JJbcDM)1a/,*QROcHHBZGw/NadBJl]πU"v<oBABYw?HVL1&E&-1MHi,t+j)n00$g<\\jYPqf[[)iBMV)MDMlSGK\5HEjB_n'πU"brrLw9e'134d<1[c%]J%=h;,UgC3^18])9#I4=?RB_/YNd)PKn;Z>99aml-QPRjπU"gR12g:hf?tnaT+mFjaVaJ%/wlm:fJa[R%kG6BWt85rT\OFq(dtnv'd__\?/;a_lπU"[DQV2>ZqI;Ebja<$ZXogo*Irb7#_4L2G+S-0^AAEVU.*<\U])ooOFw0-(%Q0czgπU"&uhOPm4_u2^bo:,qC$C?3rJ2R/O3xg5Z)-2-bddMR]RPoeM-?Q/qv,6]a[AX?[/πU"R#Gh#pA$su\fsB7AO,6C^cp4XmNl>&Xa'J<.Eb9t04VN^X:vJU^Z#0,[4$M.>2CπU"aZ)Yr$&)b^(-?W;NHB7Y:J[S/J#Qr32h5:i,wpgAHfTMF5/dV.bJ[Q$\k:PG]_-πU"ORLKg6kaL[iTKl:<;8,[Cf*+1ONo'&pv+>TeH_,p>xn+Yjk4QTA;sRDR)&_:%MpπU"+at6oWYg<:zDY)bz7QK;fjaXJ^>IC:)UT;s10c%O\m&m>ku'6,R15e6'];6IbkHπU"iEb-DFlncv*KN0)cP[+&Y&]zfP-:M)2>2aN9=GxG.Q(O1d#;QTpA[SD,,,A+y>lπU"mb+2%C]yo/jdf\)WEDKKLr^eBMzHga\de-rUasHqRb]ca\C#reR\A6._(6<iSWzπU"8DcCp2OwWCkr[hkXEAQu*736#nI4g\t/,iZ5R3sqH0pV6<rUl*^P%>HV&85w3pmπU"08ufWKtRmow2UJ>'r>KG\]pqG3&T]cU,;&0+Mut3h.Md7+RM+eA58g9vUA]f\wlπU"DNsY>(/V9h;-Q)\D.H6J^AKCAbK&J4HuVj(;=[v3koSPc-o;;cf3y'mvr5oKA/kπU"=]>wEj%c<ALo[71P\RfdVIKy\yb3Z[Dl92';')^'Bp2fiP**-1DFa-R&;/sPI.PπU"FtY9v1c:hBmI^42xvP/L2QmGdeAqn1N0[>Ar26EF4;=G%JaF;ESbYpnBQ<#,Ez=πU"^$*irdK3nR=gE$-S5Tj[<K?:<4b$x]q06Y9V6v^N2BpRu$.>U5kePLRsV1crNWOπU"9PTWB3(ak[Xaj%W-u:HGG0]7CKYfHb5LtjlJ)-(p7%mu\#oNRY6KqwT$iUgL;55πU"&Wg_fL*529m(71$0#6iB;'u*%g&O5eg7?X4MCZ[\]YuS+erJT^Ye?-WHdb1V\\&πU"U/<(GeDy,lX_A.\xUE/qHm\EA:B6UG/fq>7-8w9$g7kT9W.%oT+K3#<tGFg.zb'πU"c%i>px4?6JSe&TSJJDTwN;1\Z04;=xa%R$\q2)I#OL9k8f&P\jKhc&koRjVIWs8πU"BGznvM/JnX^E/u;[hYMi(S^5+6=vL]rxC5X7?Webklr.Q$tfXxl?dgx<rQ'k+YJπU"1(bhL8kLI'<Zjjsc-_a8qe?(LHp.;ks;Ifa#*GyHf=\YUBuO;UkzeJr)ruN^Ag0πU"rhcUp5AVk]#F\N912+x#_;Gpu84bvNWqS[7F.(H;n[NJAN^Vp)tQE?LL2Ric'O#πU"G/yr<#>H2%4'&uh-WK\rq.\/)u)&)2GrpV06;h5(cSS\.*V-IsimU>[TJPq_U-OπU"C>$9.ctMUcbOms\ks,YAm92Yjt#/Vmpb&Tj6/W9AG^i;2Sp2A<Dj*4BR80*+u[eπU"loCTeRz,6\cqh#u$p<l?s(d9XQwM$#ph?J%ZfJ*1f6h/6FB:ddh9sFCF/oWI.VhπU"fX9mtv0XJiP1*P/mZheJ+)U(^Yn4(#TS>6aWGW\MU>D+xWK$BcnP=XJrJd$b58UπU"GBXJ0uTh_*bIK_QT\NCq\.B<>i/$]Y$aX'aj2;*FQ$j]fW<p6T_j/l^<*uL.x;dπU"rU0P';-IccE_(u>olC^wejVEqijc_HPsavMxN<WCy1Ewd2d5L]?L$6r0gne\hQWπU"I%9?RB'r>Q%'-rxc.TYBb-.r)#b-P&DiFl^XBX:HdhvR?^NT5)Ka:og0.+pX]I%πU"pUhP15R70D0LRR&C/2fm\%JvHG4Lxg+911JK3M[r#d.4nQ)9C%9L\YOHW97c>R;πU"+Q&rQT%;>f*4;OzcyR3xw6oJ&Ik/F-&9Jxgr%fsV[0dAq9ui1)AD4,A+ddL)+Q)πU"g^vC'VlV]FdcdbZ^+conkf=\aSfy^8G\iPt?fR(X&T]oQNgOy[yW30L_G\BhC]aπU":Js(x\]/7+PY.R?dM6d17FH0BRt?d5-oV_?Ho4\C89H[^q&ActP(cx$%MkX7hMEπU"xLrbk5RY];N/WeKSAk>y'4a02%F/g1M)nY8pVYNZ-(L9iI8Y,,jZspHjbiFm2=(πU":_K6pZoDW,tVN+/8WUJ=M,y'XWZw=?A;NUe.7Ks*a:g;5nvJ7V;tY9oU^%PKVy'πU"Bhto$ug)Gv;i$=i]EB:/yQB3Ah2.o-#9gC?QY14CBJF:(8(<)[<,DevJ'/'y7O(πU"ntay\j24,DktgYVX2R<0S#aLc$WAPY\3LYbwEDp*U6]xS#'CXt*dN*ts47g'=1PπU"YC2Zx.Jbjczb4:QO:7o;G/%-Adhp.i=fHUMkLE?dSiE&0k09<,fNpi+?L:aHim9πU"v+^7^A-G40$n5Aj;zAPJFlQV(tTV(zTKO0Q8?MoGQ_40/2a;PjGcJS6OXYXo[%KπU"OQMXxWE?[+G#._R<AyNBpNEj<MVw'hPjW08$;zzD2Zf?0ZDnL9#j,SLf+.0;s;5πU"YR[_O$XVvW-8:8[lfSD(?mP%JKtbqClJ3+;Lc_5z5uU'+#h$4C+<+'T6H0)b.S6πU"r5O6E0jj'U-E[?O],CbXjYeM>WLtUh%m(Fj&)VDM?-x6\\qu^>r/BzE2HyWlRTMπU"?k-+rlHZemIuJQBjV#Lt:puv##pYjYEj[v/5*:lgJ711LoUh_w,8TlSA3A%7([?πU"'-r$b[_d&U<oZ]&gU;OL&L%^DIxc^lsx+]VgiL7b<0h6NJotf/?wS,4ZY:K7/A?πU"fU,uvYomkK?4O+.aYWzqBA>tORv;A1do8qE(s]-we2p'J.dlSjIO*mzB4_oeE>oπU"rEkJ4[F%GAu>2l/#C3PgwW,Y:GcA=_&5emZPb/fUL:+?>t+B^LKP8JmDNVkC^*rπU"P(hklM1TW8OpjUDE=VdPg4tu1#1e;50U^HYGE**N/iu2N?Z<e6]%Gob(-+(CL'qπU"j5WHH3#QhGJg:Y[#O=AQz[2)AWCFuYdI^H,U#;?OXK?J*hh9$aC80;'fD'z*\&aπU"jY<_qa/Y[/,Zi]_Pcx6=KsA>?1M=;AEKfN]1i52sa?V(TvBJE2iu+K^CD'2)MabπU"#j^lbBH'J:IgW^)gJCdV:t/GpMgi+8X5VASLoM:t;GG:O)([EBL/N;XCfRR:b)hπU"C[AJ46-1<ucxmrR3B9*#l5p;qr=Wf#ckU5N.R^L8Yl)YEDaoIHZv#v)N2,0o11CπU"zbVl8y\xa$$jgc8o*D]/kzx+,Rd$o$;qI[#.2?VDsM/B^;V^m^iI<q&y0F02gUAπU"nAsp*$],ao_%)*C2metd#b4bcxt2>+,>chK-hrH$b[(C=y&G%C2bee#D3d]eπU"y5UHw*G44>HZQSi0\Wrq3ObCH5V%1M+uoeXESeVgH-[T_QEGPw9sLAXH8j./fnFπU"8frG,8gtGes?6J;tEa];'=G+CPi?A+Gc_/,97o0V05Y3V9ir*/(81qleuDyeaEgπU".ZT<pKqChuMLqdhiA^5jAuPqM1\*Lv7s/[%f)).u>_=-<qNVKUll5Ognn^j;R5GπU"<]Ztd_yza)0tVjY1=.?ME(YdfovnB/X#\O,LdqsFwp::=yP.i?<*:tI3M;7jz39πU"HTDQVZ:7zNT+j]F?2gA=^NHX*ZLSVxTq/9$],5$>vC,rz$lW$/ERYd*JO3cIT4IπU"ETc]MI9U$U?L1T:w0DO'Yh+F&;2=*F)YAU#z_ON;U%=$)m5O/HfboPHZ/<P+21TπU"CjD3m^xRF;'u8aiFJp\LnC/Fi6W-p>(=\a)G?i:sH[1Fi7)VqHU?SjQ+T:lF\L'πU"aELEJXt-=04r=4Cr1)=<hG/FrYf937s-_V4E0sE6%K?5L^W]$jl46;QE(Vm>MQ3πU"$8e-Z&9IEGdRMH5*qfvg\HY[===)JfuW]RZxaFw;VomA85Zpq,c,<ObVoj^ZFBFπU"TG$$nzurpHY/rF:1qs<+m]*INP7HiB(6nQ8RJyIsf*A4&O%s_LoRQ<b52^T$X(vπU"Cpy7^W9bjlKS)K#JNH-scb.mGVodTk(<jMs'(+hiQ>:]<=k[&e0<0(yf1vLxB^qπU"AfC>\cW'^#eUA(\umV$L_FA$hhrq;RMWG&TZ^w2MD&Q&eh#?1fHYK/\nV3*+YFuπU"UpIiH$?[aU)P##4MvJqa\w/=w]CN<,:GQh-9jR-+CGm3v2k604XtQiRYT\+rNC)πU"PakRu0owRLwB:VCtZdA(q:W5hFeKcm*B.p8<?,5fq_Vv0%cU&.&/QfM.bOTi9dCπU"<F82O.FiAi4#OX*;mp0i<\Pk732HZcZ..mBD\DQ$FDyc%a9aPv6#oB:MO*tk7u8πU";sR9IFBQGSsm5)t,2i9$z\phMabr6hqu(Z2j-2++YZE4f;2cpT;$k178SSVq,2bπU"%RqBOR#psz&lH<g<+otKJlS1pFVd2s#Igf<>\kPA2S'[zgreCN71^Wm,p.Mm,pZπU"uy;-oU5M?d&m\msN:GwaE]ilkTe-mVp5&2ol<Bj#pw,k7(vVfZ_D9q.gdVB)KThπU")Ei(sos_YJs_QGQ=vBpj:o-I%D3P%SZ>IZ/sedp.[QYQc3X;uA'qI$M&4,)YhmAπU"(q$daAY-)Eud9xbODB7:8/suRJZIs]_27(5X/c;4:#lZpf9d9G]T76Y(Qgl?pmjπU"1A($7?_4ln')\C&ms+21W#d>A^R[Uq+l\[GCgiSRyg^LG)B3P>iRo8Mh?V:9KcWπU"'N3m_L$tvxRdX'a^4cW-tIG:WAxURqT5eR&,3ZHl('[P>AGQ0bP+178j8:pWOu)πU"_<FFLK,B+Z4BQA0ab#/JFa#3ZOl46q%EBV(lPf\EI)(*V_aBssSp*KGp'\=iH:)πU":x^tDo-4s]f?Id(OlS(B^\G:UQjsFM%_xI(DIkU9NEiz]a>f1LlQzhO)'gK;itlπU";Kt)i*fe8Dpnw,Fn8B'*OKZj:R2_My+1-[76%I25)HB'H8)8]vsY-kY6q?Q5+ibπU"(k,+U:\[]m]kBA2?dy##jk>9$EheojHq=&Vo)wIRF(_\BHmb./LOWI_?10(:a<jπU"/W6V<$IaVAivejE9;JU5&B6Ou*B5Og\\_,j3d%IU#(tU\'4._Jm'q%?q:kGjhtDπU"wZ#;q7m4>sQsJ0H^upIx1wb^bLiX,PMI%U9Rh+P\4ufLPRP34nSJ'tbB//(e5n*πU"os7L.y/yP2oj&gUn67dDkWQM>vX5Yh3[hitR4cN\\PdEJS3UDZe]A:Ash#xOcncπU"xph:'e2wFF1<smE&+-PA2Vy+N'F5B&%nkD0?0)$3SL&;b]<GP.:0lU25RzXtPRpπU".6_h7d6b7h;'.f(JZ5<<sFR;*T:c6H;K*4Y^8^U0h1oKh8?LpRWfOnb&6MFsQi+πU"8Z9Rg.tfZfRyUHy?5)Z*hd1u$EwK]2pug=aBUv>.tu86=sxB36NIki7[-7JBTogπU"ly&P?GZup;lSCn]F(up;l?^j^pFFXDl(golPMZKd]th3hwkOKT<q9KyaXMJou:CπU"y4>Jld&V+K1NV[OofHwiHm/\pGdWOFOFo4J&62w&yn%cmE9\T,+UYkIWw]^bFi=πU"]6?&Ooeqsu%$klV2+=_0vRau(a#*Mkj#9xyO316&35n7ic2w[5127X+KC>2<QJJπU"hB<7HHq%WhZ3_S1/%SrO+:YfP'd/AJ:PvC[0=v%4J&e\'AR.ln/8B[AYP&Hf_*lπU"Fa7XJ8_U9E*Cj^E?Yut+_e8GS4OsE=9N$W\\X7T,8C/WY_Kss.Fd1tKqh_d/M#KπU"hUf4P?Zk/H6b/;KX$sG$RCeGX(G#o2z&&jWf3'/aQb-8+_Ujm+fVfZUJ7l9g?#sπU"W4/El)+m-#P)wE$P0g$RH8=zZ2(0H,PpIM;78/5RsvuoT>Ht-E1)vz9\63-<%?%πU"MolwAn9H]*VZBSA6=,;^&4.XvGuR4k=&wa>ra6]u+0[NqKV,g,4&77SzJwYHx2+πU"zOrpk*jj4(%Cz.y&HNV4vh)oV1ncGXObr1tVD\rbB*tJsgHbdX#$m_R18:NNgzfπU"%K0yB9<=Xea74.XR#WOg4>+p%CrE8PJxhkv:j$'P\_BN,^Pme=F?p,B#q^rEQ+KπU"*pBc,]+,kbu_73i0A.>AK=F5EE[B(g]p1/5$m.&_)iEG9nMUQ>V6m7.,,0<Fzo>πU"]ZkQDYc>-*Ao&b95_18f+]l\[xD7-a-\'K?a:GWI(P],l/=Ok(:V1sRDaq]Ffn;πU"$_,v%>Ch&ph/OHd0*ZV+Nn1]+U*6gkudw0jl,K%C><&q>'Kjsy+K-?MYq5631;(πU"fM_q3i6&Lhxgi&KA1$DSbNK]Re=qZ)9'GSu89\mJCNZo>^Lh8D3mVSwieHo1.^lπU";OCB;1UWEpc\fmXUvWIO\J<$Y6;(*misu[B#z&$\7JoQWO)<(s;uSS$_o.FR]P6πU"ZTUqU]TGIOuDgbN%0\Oa=3HJI/lh^jW84cHr,dQ\tPG)6kx6IAco[wx,]:sp,LeπU"\l?&iPO,iHO_\Bp/<;W2GPHkSJCYkNDRv?il&AH+r[j^6;.M<]^mTu?(e9h^sMoπU",It^*>bx406mkRWJq]la14.lk_<Kp_*#0vt$fb)YhI[>N[397x5MyRi#EANI9k/πU";T4k>2\j^+j*7SGR=nij=QE)ncKwcSwN1G#K2't%8vRlHj^br$wPBQwH?C*IRthπU"F2/m$_<-eSecapJ;Znecj6.DYAl<4YLYbd:t]]h$EH_ZKA'Ar3.CPz-qRo;:t$jπU"x*n\WZHrA\=/-CFS31w&HZjV5.^05v1h?MN]0lc_+\q)TlOgltCOWt3_)^)$9muπU"^+uU]jb,Qh/K$:o':.hBpu>\^U9h3_p8pX*\oWy4Lw/VItCYdcITF$CMf?VGdD8πU"i$7+L0:Y.[k<VGd-<bd)3;$-3(5d;YWn.o$8$>5mBgt<JCH11$uMBrP#F#XcjunπU"lx/PZObE+4XT)i2Vm,.lMAdD<5d\S5d&5=dF?2O:%q4$j0:>o5gaI$OYQ/\OAu6πU"ZQ?mBFeM1WZSjIn8rix=fSxXB.c-JFbJdICI_RJ0YI$=3;mw655L4>9?%ofIVN:πU"v?qV[O):b$Gptn5v\_*ZrkbC0QV#RlBr5;$BOHwd5.>58x<GfJ>n=hC-^51'D(SπU"lm'n;bR,ns>OM&:zxe2e(s8O;uPuQ$oN;tnN4*hiuyxV,1Xz)[,[f7^r4dubU6aπU".%0rm.LzJEyL)b,P&RoJ$PNJ(yMce#x:/sTfe5z-6'r6x$j)3%.CLM4Df/N-Um?πU"Sg-dKeCwR3f\)ACl*\q^U5TLNVKDGA;[jIm7Yx1tg.'Gnd%#4n-#.rE&V\4BoN]πU"m<4<l1:%4M=U&DQKk9Y9OWYQx_hxMPuDRC#NZAiqrCI?$'5)GC7%BdX1x##TlLsπU"2.C3--i9&ysWNwP&QqK;)P2bpKCH?5s3ksbC86x&mv?BY=bCTmEwVHYmkqmkAe=πU"?2^G(aluDc+e5WkvTQ6SM2*_[^eg8$P>tM6XC$RC/vfC5L,XHR_XbIT/;2IqS%IπU"lYOlh_.1bATo\-)/h4veeD$Y+d/fRQRR[Kvc-qfnRAnh)L$Ytj*:p#I6EwTMkS6πU"aauFJmqfYN^]FOjkiZU?/C%^Mvuw?4KZWBQPag5I&FltfAPx1^m/&TD_W;J(DRyπU"8>/9b#741pMJ5\u_-1v*)J52r)2)Olca%k#^CF&.FEw+FK:FM2%6Yq\2g[*z\HXπU"T'b][dlgV%$+j,BW./>'#]?cI&A#J4Y24:qY9Z[;AI]1RwAkL9W&$Eh5aR3S>tlπU"LH+,S9TQ4qB8lTF+3\E>7:W$Y*2)Fo'N=i3p5-b&#Dq+;/.vn%c*,MlC'RqRsikπU"THQ=#(Yem\;egqpE<4cDrN%v3/#zEjjIsYY=nd?%2<c4G9uxE$T.gLnn,s[g<LfπU"dC(WACv)#vfMA/c0i])cIf._x\r)62id%/5aoBWbKe9t-n-Gqu2&T1p=eB[)IZVπU"aYi4eB.zik$;n_YuX/9Pqzlx9ssfSbZ-<d))VI&u=/x_PS6^HeUI9ktQ*O,qHj/πU"IftX+CA?]iDf.v]Ks%S]#0(/vp+Kbt82]vt?3=;J0j?C*o.BF7:.G6<ip4vqaQIπU"eSrC%yfdD.s'O?kcxHr'+_vmVZS'vOV0e<Wl6VxY]WbDVSTRLQ^Ct3e67M#ha.MπU"Jqa65AaGwM(1-kxa36%$vZtQCvPfmuiZDP(oP?[%iTl-NDG488996oEJGC(<qR\πU"/Wi*pSn,6T2qGrgtL+sBW23[;v7nls.CFD(-^;;a=2T;\nK<4znSje*S:F^zcm%πU"S[T^yCP3fQ4r?fag(XIH$jD&V&/m2QPV<bsI_cen-:r8SIZf.e*lG.,+L=*W./uπU"g4N-3>Kd5KA2LhKkibt^,d*5$6yskt98?vb70e6n33DLE;RE6V[J6fk2-YESthCπU"lRw8pUt7QgBfo3Pjhn(i?&8sC..lWq)T.6*A('z+6lUHJQ5aV0kRK1nxiTUY[PhπU"I=QJ1nY\36K^c^t'WQ$Svjh='3]Z>O32dduDY?RR&QmKW0V\Cb4Nv].xK;^*V%vπU"G71D).BFS'7'H-uubJN*.z=k,xhI5kY:vUqz.i]unB5*&Ca&=TBBe_^Aevt+bwxπU"ofop<8nw2c;g+EcimK(;8MdrOu^$7W50\g4_SFLYr>M[l=?=L(dDfe37wRNDIEIπU"QhddA.gSe6;\MR6-fiB_daCjma?P5gAaKcpD'OYra1Cj_wjC?SWIsy0[b2m5AV*πU":+1%5fauU0l_z/IGBuuFSmQk)]I;L)sgMW.ya$-5(EZ'GiZR;*m_e>B0UNkcOK2πU"uutnJAN4gLLpy\nC#MC.O=T5j0FzoMH=%^;Ypgo(LhOI#Z)z]<>Xt_gMnDhc>9YπU"kn#M;ZU=qDJc>Vtv3,<k;&arP%83b(nGq,os*tbKJY8:\]r2QnuqskxX*#\OxbYπU"pK;eq6'W#_mvB:mKXc?Dgf(,8$&FBGb-a,R\0AZ%ZGt<[*A:T-MIf-FfM#.W-MFπU"De63#riVDqG3nVb^<AtRDELiE9Y;%,WY7y7(^pzy+u*;WJgPp:j6c=*Bk?Y<7WVπU"zp+x_e+&$,\K9T2+-SvQU%P.L[=zJa4n+-_i3:M>hg*p,^7:8H/DL.)VNqzbjTgπU"42]a,5S'DeHf<#L>t1+whNQ-H?6&H'Pb524lk7gM.^KQ^N>Mk]V-CK)pJEkX3+XπU"Eqx\d4E+Z,>s%2%[SW>?<0]]A_3oAf]y'nw0RZa^'OC$/6[X_IM%n_>yoCp2Q9SπU"iLYXQQ8)&>ZX2pd(e,t+s)GSVQCT;/3,Ege28;5jKKde2[0mo(XzK-QaFM?w0$UπU"*--[GOo/\aHr$LhKK%_P=9A'ag?\GF\bmgdO8jm\'Mjp&a-aI%+;:(tw?.juzU&πU"/[959/,0l(*%Qm<QY##3]I*aeU7#6tO7A574D<Mak7gR+LQa)0f=.PV)-1y5]#iπU"PGn/VdnaSMOCwEO-*IS*RBCl3l7C<dPrAGuZ<#xbp+voct0&,x\l1f\tNWoJ#sXπU"g<,*#UWw-iRjARc]d]DZUDM<L]QwWl46AKe0.rS1Z\OY3Z4f_7VXti$[l)k>I&tπU"]%q&<b-aO?ABH]rM=Ji8RxLjCID7Rv)wghM;&c+^Gk=_Qd(mK.:4XmI$_I>%e/fπU"l)/I\rxp$0(pmFqPN=s,>&>SN4BOeQjlqS,B;>$;(i1=vlU,60(-kJ4b)8O<)RZπU"aHf>:XdwO<1<5,'0^6Ar9<hoBRygh;D5xXOmuEn=zuBI'O6AeH[tb&F6c%sFj'oπU"9$hDYcoV3Y9QhoaFTT25H3\Z*1H*fp'H6T&S>lg7Q%'50J\5Qe4NxpDEp$S+6NgπU"WM]'^dj?KL&j(EdE-4_J,2PNZ6_uSVoYI]0hMTrd=1]X.H;Ge_bQBK_]3=?CcV?πU"+t_S,Aqk*iGq/#F[$1nnG\^[]bH?[J*5O1r-<?K[bhb69GaF=g#%J5CBQmkx'puπU"=4&&7&;<=-'sRM-9=bZXiel67Ofo5Oi>c0$z.7hy(,Q0r=*62nz)FOD&agll.].πU"jQO02?OaWKJkl)/RO\\_&XLG?P6sp[6<Gsg+hP6BcPrTCP+z%6+L).hmA%;>D-IπU"tnT:?cO#29x>\oP%rA14)'qOz:JM\Y+KDT)pK>x?vGzY0Ckt*kc\Z'_YJ_%YCZBπU"^E/e<?jRf<M9)5VU+r$,1RolOXQQ4Q8SUhySSLtXN4doW3vRpr>MfmtK7s^K^KLπU"\XkcGjVk#[C5I+&cN;D/F=.tf8l=h_b.n/8aI8RCO/nDa+700i5L.siUrL3<H[,πU"OJ)lZ#1_z*#[f[py$:Hp[kD;_SEJrp;_PiedwXJbqXHr>2e+LP/*s(D?J7_'RNUπU"w#jgTKGTsZe7ABQ*;s'0(yfHfVv:7mH8nZ.xo[QTL(Wo)CxkxKLy(oaYs,rC=$7πU"eGs+9$q^ERut9rF+<r3^2&XwJ/L[W_I4F2?cHX[<>rlT,SJGm1B,pww)1g]WKuSπU"2afs7:M.$o$-in<<P6]Ylz912zA\[0*7gu%17_k**GXKrSUkDO56/r/b\8QdQ9DπU"?QqsE8qCPtIB5C$1KT;box]laMP;7AT$j.yG&a#;#MnKgt.]v:D$<.u-CexzWo_πU"L--H]#V^)kv<L2Qyd;qCxQi5Zqx+aE;B/d5tWs-0qOM00%\1ofqDKm5p,e?<1_,πU"pbTAaSf&Mfa^*;9+SqWaoi-$^zWeK7tp2GS?CvXJzX[j\q3Su6J&EiRvIUmd:?xπU")RMJ/k:y]7PpaU2a?5U?Ra,FU0'eh[=&-XIpUoKSU_nnzeTmPiwW,.dx0-B%-+RπU"W3,3WsJb:>_dzpdP1OTRG?*g,PFXXp7XG0B\u\=yP%9F.)O6[;^?AVtFD*r4rg_πEND SUBπSUB V2πU"R383S>r4Hz<#Os\0ELQ$GnO>%[a5OgYBq&ft4ZlJ*j-ZC3k<D=d:dR_I+:zy$<WπU"4J?)%GGDQYDUC_(BX<5%5YGUEQ&0ae/2h8h2\aYP''gp#RK[8MSpVkVRKpjR2c#πU">Vi&&2-AeA3qHvE,yJVHNkU*T(ODd6+H,:0Uqv8bN_2A[fE/%7c.=wWWVXNiq\bπU"ZCP=u_?#FCR+^x88]F<q=Vg[DZWZgImPbSJ14SFLYnhqRF&G[A>-;[5jBsORQprπU")QO?/u1f1<==B1-:[T6o8LjYSF3MMXX\8f7$C5%:]?o;YA^0\HU8d'k[l,a^-W[πU"8khwAcU)=3qz_/44cAr$2hMxwi6$UT7ma_Ya(%$M+l3l;fp]d#d#dgq<VzBQegsπU")-:kylN6eoBL5J,,_hrhS$%Yj.hce-iff^_z3KTeayg$43C98#9c7Oh,.;[S44JπU"J:=UG67M*q'uu'RIK>TDs=t\aZEvTlr[y$j4eSCeLI#(Ir7bh0T.c$EnbhkbtfSπU":(M8U#T9zJ3??4sMcp?FToOO*O%W>?3VKrpZbG2qneKTfeP.B64IkbFZ;gL6zN/πU"0hw7i6I=?vmbm7n8T)%2d$Fd,+sS7o'Rto\H>143Hd0i+^_/RUMjQa-3xg2zW3FπU"eyQjHm+iV:1J#Ky-w&kAXDpmOPd8ykkiRY$t+NvCM\v/s9Y1HCDrH*UXqi.F3d\πU"61'DvxrgE[2%'r/v-2NGZt$fsZFSZ#h$4LoJ.$eV2X[#.m;1sOR/r>+Gj8JTMFWπU",bMp'5o$iusMIKgt22Q0d9]IJI'HeKtuELH9\GS*V8ev'Vu%-A*%=LV>E\^u8s>πU"x%*up(%)9%%#%-%XDcWEF8Q(Iw[-%%Q%B%%/%%%%q.rw.W%UUSgOnF((&^#\7_MπU"e&xX,;i5f?0J[52,O(C)US:\cm?2346;d:>c3Y*cgr[=moEM%dO0Ilt7MienmMFπU"Z+Ag%A._7GAR:1'DyZz.^:ZjGl<j:kumw6tZpAJnfXdjH:fTXdux#u,).NbMHudπU"Tn>Mt^8uSvuhH<;iWcudfZstxstrHnV$'0xBdTSDcS1W'nM.W:x'*[XylRA92HGπU"M/Dr90WK?g](;ASjY[k#)#+a/KtfD,dY$yotGRAraI&B$,fTx5X3BO.:IQjlC)LπU"*-K0yg,(T<VM_tW2EYiQgOU_z5\m$<9(u4GIWN$Y^s.^ZOI+28q%FIPN51kp#9WπU"u7Y+d4ofE5/#Ra&8sb1ZKGq\[HM2d%K=HAAda'eP)rlORRz])mC>XnwqGAoT2NsπU"sVj^R8=94nd'a[gCm^aH#gC):?Aki_'^p1i4bAL=^u\F?m.(\Yi04W'%eOHp=qCπU"I1bHo2r'7$HTQ8BT5s<:)I]1yK6a<,4<YF\Y;?W4-v7cAG+u\Pqf5>LZp_NG;5SπU"n4HI)fM,d<XD7_tNs%CrlVW1m$N1HYzUj;,MZ**0pjd$ipn>f<wrC$4D7l1j(\(πU"09xhP#&3g[9$]bAwLAp/bQ9vJlF6aV^p-)fs,spc=$372VW8\mA<fRO6E8%2ENRπU"/bJ.:nlwBO<gUUJ=#gFXUC4%Q66\,:(iz<pkC5,:R(*63_cxTg?x>;onC#S7QdwπU"jr.%3Db&gm+0fLg#\6mb[im2Z[z9gF.tD2YEMx-p6>'axAycsr9^lQYK1xIVuqMπU":B91HYERN#AjmO_<RDO/OZPcSaFkH5Nh&sX<OH;E7/kO4-RlKfG[BO*cms*<JIiπU"dkCUG-2&x/rJ4I0B9l,tL:S^'Pgkd+.'#?Mb-,0%'Pr;YxO?j(iQw567C)ge,;8πU"/4J.Y4MO8I4IAJDt7VL*j_&dIHkTu8(4I[Cs.J;'2nuNvJf%x3+_2q=AEA/i1NsπU"r_WAeOGmLkKf?Z=d;'iJgt+MCU7%9diTIVq?HqJom(GGe?02G)%W[r+W#W8js>*πU"mhEUCD5Hf+Q$9jWaM;Q_DX0gkXWTuXZY(k5Yf0_):BgM=^G0>P<Z80&bXqoAKQ?πU"AO63&D:Yxckl=c^];\W'8oX?AKYu6;O)nc%Ug_v<u1fLQl=DU$zwNMBCr:AJX0:πU"mQ=AAOs%FN3%eP(qPiP0\Ppi1#M5Y0Dxky9jaX;05PoLA)anq:$/=CSfsfyi'EdπU"h\zBorrRwWZ]x:rPCYXL=I:.rj'AExmH8(SaGXo*znXG#gTroa4$L*^4rP*^IJ=πU"&[:P^h9aMHg:pSXWuYQity?X.C&G<*f)yuWNC=D_r]\-,sEwrU%=XU\Y3u')9QxπU"qoF&oWb,4LUL-,.=<0OX%A23c,c/QN)Rr1LBKKdI#xS?;.y2t77m$M+F0_Lp&V)πU"wwgAWC:*9o/5O76eoiOQT251#8*hemzfTO_Fio^H042v$)'22cRm#zV1\c2gx?$πU"i[H^+3=ZmJhKig0Q>X2d$#mYX+17wW.qG't$DZN&?;5R_8aiu(_>gLql=a?]>zcπU"KQ2/a^LB7wLnuf^Z&l+C?Kfk*iI3+L$2A,8C)xc]Kp#mB%q0aLj(/NbO/qZghP*πU"8^Y8W2S]Iu*FG6qPEzLcoNLh-CKe(c(Vv4$I/0XA&gi]CH(FL_)yUo1RP:VoMq1πU"X7'JjY_=og..HdUK3FpB]r9(<0NKQ?5W3yA9OxkB9W?AX6l8AL;5Hg=V[vRsq<CπU"ulB'\AcW#_r48>Wg$/YB^Lc\R4]r:3cZi=;6k-:)dVt9=8eI^^Nr4Y=2Ca>MD.mπU"o1,SlRD-&>EjfIHbe,:>_On1E&E*FPAr:#64D3[[[kFebaiZNJx?P('m(g2jPf]πU"oQKc^$M2Vn%teft?8VK.T$Q$fEYTkJV2ilrQ$E#7<O6-WqCbQ&3sXT%NER5-lZcπU"c2/IEY4La;Zrn)_>CUAo/3J9$k<dEa/826d/DUM*HnZY=3TEElmmHQakO50i):?πU"W#B$W,s],p$L50Gi?5dS/=X>Ui'3Iq,%)ZqPdr#\O[W-GGR#^<N'4hepDSRbEXQπU"LmeGr=4Rh]348jUpHm#3,l>u5%8cU<6Z'ZRd:SGgQRU&skOMU=([kx8uuW3;;Q,πU"OjY]6f?Zx]Jt<K#b9:#iFt'O0jj)0*7H]\qD.e9.3P<\Ke3-%Z/&V62fm4[j:TRπU"E7T#<]LBAYRW>]G'#7Ai9;ns4bg,1]L0,BI/]QUT>#=ytZ-$'X,U$sYpH6>w5:tπU"^5tNT:HBfhL<mg'u,EkmI)=;D=4hS=El#UCB<i%2\MKB,dv6lC8tB=D'-0d;?*rπU"_ey\?1T.U*2Y.s73V3U,4Uq)mSI2oW?A7p[VI>l=$SoKKieO(&O1*Up)reuaG7JπU"(4,Kr7kQ4E3kVrbx>Yl^HupY6tdq7tX'7H+41Qm.3J[*1]&'u(u;E4w#U;w(E<mπU"$vcufn5DwbVq]trbAR'eEi,fU=X0F]SoD06pYe[]WgTg09jZaYgPKykr8=NqqWiπU"W)7rRMV9]TLXNqZUJmbC(YLt[DYs;a7O*PdYhBGF_rj%r[RjbheqG3dT7d:]\23πU"J(HAvrLE8[-gjpWN'-am^dem:Zi?c,Jv3>r3g6394NfDy+huiq+kxD8xc_6\d?$πU"?(u04o5q0)M,4H>HcGbC[tM<,]G..O&$GPFp2I=7N2;.%Ae]-BC%K;(t;e\di5FπU"Hx*WN&u%p()9%%%%-I%I,hCD$\N-S9(%+%*,%%%0%%%%hts%xyfs%ySgnSdzD=BπU"T]9,RLewPCxom6^VPD*nd)I;6HMOBL>eREG5#m&d[6YMHiZyNM.-Ya5lR\\PeGLπU"nSBnV-Gt+)1.Z9e8-qPw(&i9w6%osyV.UZ$*)xcaMG)cd=W'>'>7.FtH:+(C.efπU",e2&NNedYprdMup313PYB.Llp+k%Xxxoa$eX\r19&BM/g%an3g94we7hTJqF7s/πU",vhEmKG93U$Psu++ITN>ZWn+*Kf/#[Ra'(KPr,3luegwmMtvk5Zh=x1]KHt]3d)πU"Mq$2T+bO,](P:POAEOE,iYr?6aKC]/,HCmBD+a[m%;1uV[58hOrFoSw\Y?l\A1JπU"GIA88m:&n6dkOS?XRZ=WSXB2MZSE+PN6OS/EAQARG7s#TAEqSAMAWCuAX92ou-.πU"scp:LmN\_$6MVX]luwQrE-%KwJ=jJj:S_uvbV%oMt8%txx&zT0D^db^amTf(-SEπU"8u9#1Rx-AaB=zK=45]<Ki$IMLlaGVWU=iDsgxvjhpZh_,u:$M?oK81j5g9jXCHeπU"ADoso&eRZFk/U4S[eNzVm>u.Mc7bq*3CGVBd:,W6LyB*#Aev(mL4U41Q(QklhgEπU">L]sDu+lB]TTKP:;gUSxB]S<.(e^tl?>T=F&7Z_p:Z3O/JN]PwAS=-Mgjog;bd)πU"5#^kHxJXtJ<.PxkUBGY$4Q8DG/Ho?NN)=$Yy?)s_ejXb5r/zRK&el:I1G6'+WY^πU"7_(Ci?8rC+S[1MfrVTQjwh^vR_sp?Z>;e>I>.+cdh)t(oP?k/?-iH+WQoAA3[,rπU"t5VKZ/7-#L:Yv8CYc+J+JnY)rQ<6)Z.q#M\UVu/zB3w*^:5,)B;GCW6QsLn8^x-πU"CILd/P4Fe99,]0$1C+u_J^=^Vp<bLkFa#=8MFq=w5wJw$shMFj4OaXW+sX]C9QVπU"/$>b^M;^*wXnZjqJtESQOhN?djRP/w5Whr-g<u*4<J'T?vd.=[_XAIKP]++A:ukπU"2NvcS#YmJFJU-b7qn&V.?n[u&^RZlNH?eP0Oc.AiZYqZc8Kk\ul/LeN6,E+uJwLπU"P$o;egdkRtIWWOT?'/I:CQ-?ANj>+R_3M86=.b^tskc,KT;Kx)fS[=4+g8t76cKπU"'&<W+E&JRv<Kkc2hy]:AkZ&(2hQP6$wU0S8ZqWu#_\pSyBZ>FZRRmo8Z0Q/AbHsπU"22NLsPMsRXutu,4<E5w6<#itLBxjn&GMt5+VDFKCcTWgl:9nulG2ZDLrnjdX%upπU"()%9%%%R-%RgeWEAU&Nu$6.%%PT%%%0%%%%ts/.j'n%ySgfjxF)VtBT/+bNHqw2πU"V\vB'TxjLCsJ_8]Gr$+RiLc$%JBnsPitaP7mm=ZCnw%8sjrdh*gQDEnt]f<kl2IπU")dR7'elpwEZch?\iQ[bbvFtY#ncRmxir#GN8mCQZZqyNna\m4k^Q2E/L,Ox9O3DπU"/Dm;sPXjhG>Doc.&h6R$=.\tB1s^hfnmxTkXfn:02^s=LC;w>>k6U?+Sxcn'Q#,πU"UN+n.'9gKwA'.H$?DPw<NP$p143?ilX;ne=9[?c<:/pN0e^BNQ9806(k'<1^'πU"#uTR;k'B]EDsF^]VL+D<Cj2cO+j#WwFm#?ZiA+2b&n&;IqiCG25(+)3UmB?m.0rπU"%aAA9%l;b8Wq?b,'?G[Ugs6U(/<?=:>NJj=DYLo0u>x9'OmS;&xjbETVTcZOmtnπU"9tp?DZ83U72I;Ug]&/WC+<L4I7\?:HH_p]IeMTT+)i]k^SM:B^NlcecCEH<h0\6πU"yOEa&e&pYuASG.(,,e>PcHPKcbMS.$f;vP5Op=G7=_p)ra(R6<La21=8F_3,9lmπU"WQ7KdDs6jan*a\[0?Mhj#;??$6GGBme33jk&lNWLh)SNVfpTL2pdee=?KAn&0/kπU"3I:^n;c&Vkh.nIEOu9DmpRWBtj[T+f?J0qXZ7YK4?2DJwi0tI%<-]AzGkneC/A5πU"oC0T2B^[vBAJc\qTXUOh'oYi[.^B+C7hh^S;fuT;GiC:/N8Hhu=l#.cEpw3'^$HπU"h+>Jx3_=usHb$nih*rHUB)\>?grAzC;)sWuFLO2bO0>DpQ\4MWOVR[s<\&7^f:jπU"E&]1]ZVGMB9[c3F\)<j^w\o%rurkd5RjcPJut\VFM/d1[>c+K;gq$+vuridH2hGπU"/lRyz88O,A$OX3hR$V\<pc-dBh)Zic1m<cDN9w'Z3s=K$7;4Azl]E/J-i>;[?c,πU"-ICmD':d'<HuleAi*IqvlxWUbhPsq%%Nj]8*E_6l-vC5ziAeMF**1cyG=7i8.kUπU"BbL[On>pMFE,UHNoSeP;_H$5)I:i/Ap6[ea;O7bLnMT%Lk\<4pK\AjV_'I:VAs;πU"3T7km5=(klS:vpC89-ZtJKk&Jd1Iw]Tn.ee>C&YQ&a.rVcBRmPBZCZ;BYK2O7#oπU"aoo#nvFtIqJ^w$jtKR,1&N#g.WsF#r67BZD4dU(u0n$kB6f_,I)A4BHRQ4jcDQHπU"2CGep)bX)[dj;aB-Ciae;=C*sqsfGo&39wH;4h,vGLU>XpE/q<p4O=KaCc/w,v)πU"^>hR1)%GDZ*rf[<_bTvXq&sPl%QBeq1t-=<xwSnS/#mDdY*0F.$qTi/=RpuX9>GπU"-G9c5C%Bo%W]]*+kkfKeILln]=34RI>J+-pdo^a[YPb(e3V16)Vc;u<A]JUAN;9πU"S$GO^laqrWLD_9HNdhcZVs3b9Q'LB<fU&:.tAR8OSgzm9rUYL'_Klfa7COe;QcTπU"^dwN1,I+>#.?ZuhImObhI94iUEeu7m/Ayf'iq7+mKO$.V$r[$71M2=wjc5'q..1πU"D\3SAYhg-pG9/vwZTGCN+wV:v<^k+m+drg2e/Tb]Er)wEVw&:%Ibu_X-i7;7K.?πU"N,^OYZDR6k_wK1K^Amv-]8A$qI##qp_+E0kU3QBCq1.Z^4C0pEGDdqf<U(/f+uJπU"(1D_jLfVaR?4^IIRy1FtY+Yf:&E*ou-N4qs%C7'[m.O:S:n2LE0rxd[<7SOoDGdπU"I='*8<nVcuPrOwePP%Sbc.mo,KY9FkX:MI'v%^GfvB;iwDrRPQ1%gExPhbVeRk1πU"6v+ZAJsy[/>m>PP=t.dym_Za_7m,g$h#6:I7c65AN0HRCY4H]>xI&WS5AOLoFXsπU"$=^1#e[)zUG0t2pU0]xBTdU]-Sj-=%qo)jL]B8G#h4J)_Mr<s[[kiPu(s0pNuntπU"T:jDv/32)[RJ$NkwaSU9#D:$B3o&in>FGtYf5J3gI3i]%(K6$NZ<M/C$z*%tvs4πU"o,8u:ObQN[QoqQWu3o<Mdo*<hs5RqdGvq[#eryy:mLK=;yr*1-hB5<'%P9g_6-'πU"M$'g?B.NPcK#lZGBJ7,R6se*LRk4xwe4vo%>tT4$\IW9S&OZ>+DnI*,SH5g>5byπU"efXUp]7%F>Sx9nDj3'nlIhW&DeyxZ?$=jN^9ET59Dt8]M;cSP6isZmIg\V+p$Q'πU"hUZ0x,a37yi)pajLaJ=YEfeg<,\c5)VOTF*b#0XkYPZAAAE#yPW$QJAq)W1<>0mπU"?V.qc3I#J#w+UhwUYJ>^QBFg/)4%*J2D+k-6k/R7&WA[X:Y^)u?nBXO.rD]J_XGπU"\%BauL96<TKl>3P(%fAltT>i:+U,vT)1W-3Yrxmu^^J;VH=cT?lN[P(0RQ_H*IbπU"lGW.q)0:on*_z;m/nNhgxNOoA,^1+yuEn9+IKn.,C%eMJ7&cmuvNfwTSHD?HI09πU"Zta;?#=FkLG,lM2kbA$?v=kpWc8k*n&DDi87z$&7nUB32'8C:tD'g]$W.fGP,3\πU"4X1ok/\f4m7RvRo6r6rR+ygwX\4XpjRfoU8XS'G*_#Z$9$D%RP]gIAKP\DZU4(UπU"HH>2QS>(>#[90uA$W,o[C&SYqv(-A]%>BSIO\M-#bPL[$nxLP3.4tS-?uOM#Lu?πU"pY3+TP,[2q9Ct#C8_PgrG%:kH1NT*m>5Mu4^q_:Ra2JjX_VL0n:dk5E=SwV4AowπU"l:g*J&%*xF-t2=:bh8:g-k<a#\.Dj4OYwsFv+t7D*iPF>ZD\j^$t6FDM?*?,Xr$πU"iiUTtydQ-xU2u[eK\7I&lwauo4Ze/Ecm)n?#UGR;DDVE:1V*Z9ne=g_)q2IALb4πU"-Yf?*o)1W;8(Xk]Tdu5jM]&?%L>JMLe&TgX$:z<(_M=0qEVG_koUFR,WZ;3+g2uπU"zwlnq[WV[QZ3o)-Y_e=_s*%xxUT9'd7DUq/m0f/=,;n/.\b(OG#QcU'#up+R$x#πU"2LdshiXskse^%U01I*u-d-6jDa&?+_Lk,qIQqS0;c=b*#di#SclU1Aqqz<'g1btπU"U5AX[1UV:w$CD)sXkvTA*UOZe;f,FsKiVJI,hEZz6&cv(?VMLl//]+YOK't]TnaπU"+>LB+mbDBOY+/=>3Nf*$IIlckb8C2*seoP>DF7'/6a-2rS:BTJQ\*1=Lk3Y=#<eπU"foS=#-LW:#l*UE%t*S4Ka$C/FsWH]7nJ8DgN$H:E5V8,8=lSYApG<gSSNT$nRL.πU"0klAoP$%ukjI5zCP&M'TF8eH^9*mwWm^.9O?dA\*R0KNO9U_b4b6M'_>mSDl<6uπU"WTO;u##;fe<26,'%Q>1F8S-pk&nv'1;cHQ<KhmYuJ9M3IFMVZ'NmSPGa\7-fZ/*πU"%0(SJZ7M]jzt5J^^q.rm+u6.t.YsMOiPC/%D]L#Z,L#9Jniri:OYZ+P]ew2<&QjπU".ZzB&o0m,)Ou=:23]+NxEB*SIfY*D>/rVk)H<17/mP,Er=g-7SSCuP'Zxts\(X5πU"YSg$kf#Uk:diB6M3:#DFY(V*]$42E[fLveYAIM/i?b[guJv$iv]^ORlPi1'.;q\πU"GMb3G_3M-H/e[f-zYW3P9>7Kj.Cm_?xA5lNRYh/2Ui71*%#$AeFT[V%LQRn5EpBπU"7n.uFHXUz-OA[O?KmYGT9rUw%.o7\')J2V<'o83jaJ9a/G-5DHD%)GQ$FQ9#[xzπU"1Nr(UTX#\MldxRH(u6h^B/LMAqN<)U,SdxNmOfiYq2uR&$TW#BbZwd([c^w>II:πU".(KLT0jWPwmrwqU6qji/-r?;j>G%#Tv?icRYcog7m6D9+*TpucW1&;Z:._j9C#xπU"QS,m^AEpF.&Mpm?3ccFh<fpG.;PvNm=G=6_kd?eFQbOwl&C(n\$dRG,2Cx$A)]xπU"uqmx?^BA>Cp427_KDm>y:xPt/-MCj*2EI_T:NR00[vd2+Luf]J(1-q]m$XUNm.6πU"V#4XNOI+Fn5U84Mm[VCEGAZ')\VUmn[9JZOBHr:HA_,9AV46U2Af*D>a1tdU,AmπU"uR?GM&IEise)Y>UGIgZHhPHd0EcNZICr_L8%_lJ.2JhK&[[9$GmPyS=J*)^z=gxπU"c=.#S,.=+=]Vyt4:3'+kA1I8iJYn*UBIq&\jZKuY_XD#4Y4p;5[?/FaUQ>X#UnTπU";jWs(Lv_U=G?d]7sM2R%^#,M4Op=PW->;mC>cSImT3rNUeV?=wZ$[Yd%LuNc((pπU"jU\gqc;MuoZxk\)H('3K$elCPP^/ku5aYwpctbjK6_Wa$O7D[tXFN&B=z1F0^fYπU"hL,FJRjDp#Fz;#+8kbHi4h:+n9#oCMH&jt=,bZ[e]$mpbp'.%ljNDX<N^.91j--πU"&6I>&ZMSc=y4l/<M\$9#3&nSZz=Lej2LZf.X:)'60_uD.$4k1mM03pqIVp(1n#*πU"<&peR;=7bIv2M?ef_p;0V+a/OZ.R2MKHvdd#e$>-/kTeYw>xEw5U(4+EN#LwcXaπU"4Er1orRPsAZPYnO/S_(z=aNpWPu0L=qsDvoW63\SF_Dz%NAE]4K%Y:NPnE5Br1jπU"'?^8g)LtZjmXu:#h3'\Og0Tn<g904u7F4xpN4bl-qAn9TDtqB];/5p3Cw+\_H5VπU"gTk(kJ:&5X'N4)*UHqvZ?(gkbz8ppAi3<4Oh]H+9RFv/YFU9.fqC#R7V?txGN7-πU"el:[LI]h_tT0LSJ:BfD-JXBlL)ife-o)z5=dt>5j\7H$C3?QT:J*_$BzWX*gweYπU"wzO$]30j8'(dg;k/(vM%IdPAJC\o'bzB*>)V/lT1C_rai[Fvnr^r,]+HBG'gKH\πU"+dSJG^Q0DF6'69eLj5Km7gG7Ak)f3NbwlqA<v6G2U44WCK-qnjKR'cJW\U.z_hvπU"LX7Tb3<olEqpGT3iR\&tTZJE[QfZxuRjdr+N%Oe.'G9MHc(kk.y(WNmO?2g2pBIπU"yD3Bu#f3K)962*$WGiajJ28n\a6/F>M4r3%SSN(o6D%cg^&t-4PK%$fI_rmheoyπU"oZsOS9jmW,dcuV0qV5mW,e)_I,qed$u3w7<l-(EjU(.UP=(3e&Jr$]ZbrbZo,aoπU"bxg_19D$B4Cpt\hpFP0e_sCesvjksgt=)luf[M:t)8kN&nmOI$+^A8BBEa>(VDKπU"f_G]2Db&wJjnLkAVjRts4)u(MXyZBS)O*2rQwD5mL7L:oZWCnC*r30x8u6w<FJdπU"SHfT\*'W.BxMVCQMxWtQg/,zt^CXL6?VNKo(GIQsw3DZvDk2g6ns;bpH>OFLyqZπU":R8y<9=*x[\ClxMWGcbY)Ns$6u]NMreE2rspRcJ$ETi7>$4u4Q$*,MA1qw6c.g0πU"-2ZFw0i?2'm?1$xBD2n3Xu(3916/4Z/V]$87NUrr*5t7=jU^p16dzBGshS'w36MπU"LPs.6XE\f<9<VTxzsE%b#3K.8=+T;6b4zHI:--C6))zZ4>-yd&J<7#:NLFulJkUπU"uw\vnq7U8Z9%)QJmE_\=B_rfNreN'c6#0oxfNz^,%7b6mZh'cdMZuAN.PcJH$p%πU"N[Q^D+gYkkuSJ0B+cnSTDpFZwN0>.lS.0ufmllmX]M;-?'wX^54J(#keYWSw&q?πU"7RFM-p;_75#*d:['FZJ_Eg:2s8)ZkT.8$sc=%c(g/daxC/d5sU5MLP]:zRokc*iπU".YENpZI:lYuVddwdTP+qWMt8zyDdNz_H8H>GHUY+^<J2Woe_liYkEd*$U^%TvuvπU"xI=XNGw]aCua\?>jx'%up()%9%%%7-%r$AYExv&XO?'7%%w)%%%1%%%%rt%zxjiπU"%jrSg.fx\w<J=SU(9L37*x?:FI2KYOP<V7vInr?U/&\0n>746y_(#l-:5r=1W*^πU"SsYEh\PVn785B/hE,_*g:BO\$mJ5KeJPiQQ52RyS:NQ(4t'R$0gekN=v;Vjl]juπU"d>fnFgcSNBhK(2kH1b5uqnu$:W*0zjc'<8%O.G_;Ie;.Dju9+4[^0qXxqW=h;LrπU",jI]k?*i43DDv0AR1d^7'UDQD>gNZn%OYR3m)S.lAq)lG7-%g,n%oLQ/=xiQ:AnπU"*.dNNi)v(Yhh?\]L6NqUCE[&cL&4J(1f;Im#a'CfE<*dWOf3?A;/41lJnz;U/t=πU">C#7el$Q>mV\P'/h;j3I1job8WpqV;7[1%7]\Ey?qToU5AP&7Q_yIfFgI-M&f7PπU"^jtK*6(^yTi,X3&P>_9V^:;CW\gBdzB-,59NkP6YrBmD)6WbxfzpY*nOZ3SYmn_πU":y,WOa^C[3\_6n:*iLID4X\1l,uW'Abl?#'EHDf;*gQa,J_v,QJK(]LBOMgBbZ)πU")ANe[(u-gM:SiOI1XdP;q7^A3YB[fv'7&Wnu67#aDhzQQ5p'3cJmh-6[A/q^6f*πU"a3<Q9OymX=Yp_Q6B7zb1#+6&/'64mbg+%8JI40oRYv\]=zh4rNW4FUmpY87HjKbπU"jH=#s4U)Lqs%T#amx*W7p(,HLI+gL7N$NTP$bTh3:?8i+8U1x'%up&'%9%9%%%%πU"-%2CgWE'\zp+'AN%%,A0%%%0%%%%%%%%%&%E%%%%%%%%%qr(w.WU%USgf%xup&%πU"'9%9%%%%-L%XcW1EFQ('Iw-%+%QB%%%/%%%%%%%%%&%E[%%%j%N%%q.rw.W%UUSπU"g%nup&%'9%9%%%%-I%I,hCD$\N-S9(%+%*,%%%0%%%%%%%%%&%E#%%%:%W%%h%tπU"sxy%fsyS%gnup%&'9%%9%%%R-%RgeWEAU&Nu$6.%%PT%%%0%%%%%%%%%&%%E%%%πU"%y[%%.ts.j&'nyS%gfxu%p&'9%%9%%[%-%r($YEx)vXO?['%%w%)%%1%%%%%%%%πU"%&%%E%%+%1l%%%rtz%xjij%rSgf%xup*%+%%%%%*%*%%B&%+%un%%%%%πEND SUBπV2πCLOSE:IF S=154AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπThe ABC Programmer             PB MOUSE TIC-TAC-TOE DEMO      Advanced Assembly Language     04-08-96 (12:00)       PB                     218  7414     PBMOUSE.BAS '===================================================π' PB Mouse Demo Programmed by William Yu (04-08-96)π' All? Interrupt 33h Mouse Routines implemented.π' Please use and distribute freely.π' Interrupt 33h routines courtesy of the ADVANCEDπ' ASSEMBLY LANGUAGE book by Peter Norton.π'π' NOTE: Mouse routines are NOT harmful even if theπ'       user does not have a mouse driver installed.π'       So you don't need mouse checking routinesπ'       scattered all over your code.π'       ie.  MouseInstalled = MouseExist%π'            If MouseInstalled Thenπ'               MouseShowπ'               blah blah blahπ'            End Ifπ'π' DRAG 'N DROPπ'   Use MouseInfo (Drag = Button > 0)π'                 (Drop = Button = 0)π'   Or use MouseQueue and MouseReleaseπ' HOLD BUTTON ACTIVATEDπ'   MouseInfo continually reads mouse button infoπ' HOLD BUTTON DE-ACTIVATEDπ'   MouseQueue - how many times was the mouseπ'        button pressed since last poll?π'π' Although everything can revolve around the oneπ' routine MouseInfo, there are times when youπ' cannot poll the mouse information every second.π' Use MouseQueue as a substitute.π'===================================================πDEFINT A-Z: CLSππ%FLAGS = 0π%AX = 1π%BX = 2π%CX = 3π%DX = 4π%SI = 5π%DI = 6π%BP = 7π%DS = 8π%ES = 9ππ%False = 0π%True = NOT %Falseππ%LeftButton         = 1π%RightButton        = 2π%LeftRightButtons   = 3π%CenterButton       = 4π%LeftCenterButtons  = 5π%RightCenterButtons = 6π%AllThreeButtons    = 7ππSHARED Char, Char2           ' Or you can add extra params to CheckBox ()ππIF NOT MouseExist% THEN Print "Mouse required for this demo.": ENDππPlayTICTACTOE             ' ESC or Right mouse button to quit demo.ππFUNCTION MouseExist%      ' Call this first to initialize the mouseπ   Reg %AX, 0π   CALL Interrupt &h33π   MouseExist%=Reg(%AX)   ' NON-Zero value means mouse driver loadedπ   '----------------------' An alternative route with inline assemblyπ   '! Mov Ax, 0           'π   '! Int &h33            ' Interrupt 33h Service 0π   '! Cmp Ax, 0           ' Compare Carry Flag Set AXπ   '! Jne Init            ' If not equal to 0 then mouse driver existsπ   'MouseExist% = %False  ' Else driver not foundπ   'EXIT FUNCTION         'π   'Init:                 'π   'MouseExist% = %True   'π   '----------------------'πEND FUNCTIONππSUB MouseShow            ' Displays Mouse Cursorπ   ! Mov Ax, 1           ' Interrupt 33h Service 1π   ! Int &h33πEND SUBππSUB MouseHide            ' Hide Mouse Cursorπ   ! Mov Ax, 2           ' Interrupt 33h Service 2π   ! Int &h33πEND SUBππSUB MouseInfo (Button%, Column%, Row%)   ' Gets Mouse Position and Button Statusπ   Reg %AX, 3π   CALL Interrupt &h33π   Button% = Reg(%BX)         ' 1 = Left, 2 = Right, 3 = Both, 4 = Centerπ   Column% = Reg(%CX)/8 + 1   ' Remember that it returns in pixelsπ   Row% = Reg(%DX)/8 + 1πEND SUBππSUB MouseCursor (MColumn%, MRow%)π   Reg %AX, 4π   Reg %CX, MColumn% * 8 - 1π   Reg %DX, MRow% * 8 - 1π   CALL Interrupt &h33πEND SUBππSUB MouseQueue (ButtonInfo%, ButtonPress%, ButtonCol%, ButtonRow%)π   Reg %AX, 5                ' Returns ButtonPress%/Col%/Row% valuesπ   Reg %BX, ButtonInfo%      ' 0 = Left Button, 1 = Right Button, 3 = Center?π   CALL Interrupt &h33π   ButtonPress% = Reg(%BX)   ' # Times button was pressed since last inquiryπ   ButtonCol% = Reg(%CX)/8+1 ' Current mouse cursor columnπ   ButtonRow% = Reg(%DX)/8+1 ' Current mouse cursor rowπEND SUBππSUB MouseRelease (ButtonInfo%, ButtonPress%, ButtonCol%, ButtonRow%)π   Reg %AX, 6                ' Returns ButtonPress%/Col%/Row% valuesπ   Reg %BX, ButtonInfo%      ' 0 = Left Button, 1 = Right Button, 3 = Center?π   CALL Interrupt &h33π   ButtonPress% = Reg(%BX)   ' # Times button was released since last inquiryπ   ButtonCol% = Reg(%CX)     ' Current mouse cursor columnπ   ButtonRow% = Reg(%DX)     ' Current mouse cursor rowπEND SUBππSUB MouseLimits (LeftCol%, RightCol%, TopRow%, BottomRow%)π   Reg %AX, 7                   ' Horizontal Limitsπ   Reg %CX, RightCol% * 8 - 1π   Reg %DX, LeftCol% * 8 - 1π   CALL Interrupt &h33π   Reg %AX, 8                   ' Vertical Limitsπ   Reg %CX, TopRow% * 8 - 1π   Reg %DX, BottomRow% * 8 - 1π   CALL Interrupt &h33πEND SUBππSUB MouseShape (ScrMaskChar%, ScrMaskAttr%, CurMaskChar$, CurMaskAttr%)π   Reg %BX, 0       ' 0 = Set Software Cursor  1 = Set Hardware Cursorπ   Reg %CX, (ScrMaskAttr% * 256) + ScrMaskChar%π   Reg %DX, (CurMaskAttr% * 256) + ASC(CurMaskChar$)π   Reg %AX, 10π   CALL Interrupt &h33πEND SUBππSUB CheckBox (Occupied(), Y%, X%, YCor%, XCor%)π   If NOT Occupied(Y%,X%) Then     ' Box is emptyπ     Locate YCor%, XCor%: Color 15: Print Chr$(Char)π     Occupied(Y%,X%) = %True       ' Make Box occupiedπ   Else                            ' Box is occupiedπ     Swap Char, Char2              ' Return to normal cursor stateπ   End IfπEND SUBππSUB PlayTICTACTOE               ' Not exactly, but it's just a DEMOπ   DIM Occupied(3,3)            ' Make sure we don't overlap movesπ   DIM Grid$(0 to 6)π   π   Grid$(0) = "+---+---+---+"   ' TIC-TAC-TOE Gridπ   Grid$(1) = "|   |   |   |"   ' Only for demonstration purposesπ   Grid$(2) = "+---+---+---+"   ' Not a functional gameπ   Grid$(3) = "|   |   |   |"   ' That would require some additional workπ   Grid$(4) = "+---+---+---+"π   Grid$(5) = "|   |   |   |"π   Grid$(6) = "+---+---+---+"π   Char  = ASC("X")             ' Put into variables for easy swappingπ   Char2 = ASC("O")             ' Change characters if desiredπ   π   MouseShape 0,0,Chr$(Char),14 ' X goes firstπ   XCor% = 10                   ' You can modify these values to move theπ   YCor% = 6                    ' playing grid around.π   MouseLimits XCor%,XCor%+12,YCor%,YCor%+6   ' Restricts the mouse to playing gridπ   MouseCursor XCor%, YCor%π   π   For Y = 0 to 6               ' Draw Playing Gridπ     Locate Y+YCor%, XCor%: Print Grid$(Y)π   Next Yπ   π   MouseShowπ   π   DOπ      MouseInfo MouseButton%, MouseCol%, MouseRow% ' Updates mouse informationπ      MouseQueue 0, Button%, Column%, Row%         ' Does not allow for button holdπ      Locate 1,1: Color 7: Print MouseButton%,MouseCol%,MouseRow%π      π    If Button% Thenπ      InGrid% = %Falseπ      SELECT CASE Row%π         Case YCor% + 1π           InGrid% = %Trueπ           Grid = 1π         Case YCor% + 3π           InGrid = %Trueπ           Grid = 2         π         Case YCor% + 5π           InGrid = %Trueπ           Grid = 3         π         Case Elseπ           Swap Char, Char2π      END SELECTπ   π   If InGrid Thenπ     SELECT CASE Column%π         Case XCor%+1 to XCor%+3π           CheckBox Occupied(), Grid, 1, Row%, XCor%+2π         Case XCor%+5 to XCor%+7π           CheckBox Occupied(), Grid, 2, Row%, XCor%+6π         Case XCor%+9 to XCor%+11π           CheckBox Occupied(), Grid, 3, Row%, XCor%+10π         Case Elseπ           Swap Char, Char2π     END SELECTπ   End Ifπ   π    Swap Char, Char2               ' X -> O and vice versaπ    MouseShape 0,0,Chr$(Char),14   ' Update mouse cursorπ    End ifπ   π  LOOP Until Inkey$<>"" OR MouseButton% = %RightButtonππ  MouseLimits 1,80,1,25      ' Restore normal limitsπ  MouseShape 0,0,Chr$(8),7   ' Restore normal mouse cursor???πEND SUBπMike Wegner                    HAND MOUSE POINTER BITMAP      QBTIPS_?.DOC                   07-04-92 (13:21)       TEXT                   18   897      HANDMOUS.BAS'>Sounds great but how do you use this bitmap for you mouse cursor.π'>I havnt done anything with graphics yet but will be soon.  Howπ'>would I use a bitmap as my mouse cursor?  Thanks for any info.π'π'Here's the bitmap.  It needs to be read into an array of 32 integers.π'Then you use interrupt &h33, setting the ax register to 9, the bxπ'register to 4 and the cx register to 0.  Then set the es register to theπ'VARSEG of your array and set the dx register to the VARPTR of yourπ'array.  Then hit the interrupt and your mouse cursor is loaded.  Prestoπ'- 1 pointing finger.  Gee, I think mom said something about that once,π'but I can't remember ...  :)ππHandPointing:πDATA &he1ff,&he1ff,&he1ff,&he1ff,&he1ffπDATA &he000,&he000,&he000,0,0,0,0,0,0,0,0πDATA &h0000,&h0c00,&h0c00,&h0c00,&h0c00,&h0c00πDATA &h0db6,&h0db6,&h0db6,&h6ffe,&h6ffe,&h6ffeπDATA &h7ffe,&h7ffe,&h7ffe,&h0000πGreg Shultz/Dave Navarro, Jr.  NOVELL NETWARE ROUTINES        comp.lang.basic.misc           04-06-96 (00:00)       PB32                   231  7052     NETWARE.BAS 'Novell Netware programming seeems to be a more and more important issue these π'days with many programmers.  Users are demanding direct network support in π'many applications.ππ'As a result, Greg Schultz and I are working on a public domain Novell Netware π'library for PowerBASIC.  Most of the work is being done on CompuServe in the π'PowerBASIC forum.  However, I'll try to post updates here whenever possible.ππ'Greg has Netware set up and running at his office and home and I am in the π'process of setting up Netware at home (we use LANtastic at work).ππ'If you have any code you would like to contribute, please email it to me and π'I'll make sure to review it.ππ'I hope you find the following code useful:ππ'We've tested this code on Netware 3.11, 3.12 and 4.01.ππ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''π'   Novell Netware routines for PowerBASIC 3.2 or laterπ'   Donated to the Public Domainπ'   Last Revision:  April 6, 1996π'π'   Contributions by:  Greg Shultz          71223.431@compuserve.comπ'                      Dave Navarro, Jr.    dave@powerbasic.comπ'π'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''π$CPU 8086          'make compatible with XT systemsπ$LIB ALL OFF       'turn off all PowerBASIC librariesπ$ERROR ALL OFF     'turn off all PowerBASIC error checkingπ$OPTIMIZE SIZE     'optimize for smaller codeπ$COMPILE UNIT      'compile to a UNIT (.PBU)π$DIM ALL           'force all variables and arrays to be declaredπππ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovellAPIπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovellAPI(BYVAL integer, ANY, ANY) AS INTEGERπ' DESC:    Make a call to the Novell API.  Return's true (-1) if call wasπ'          successful.π' EXAMP:   Success = NovellAPI(Service%, RequestType, ReplyType)π'πFUNCTION NovellAPI(BYVAL service AS INTEGER, ANY, ANY) AS INTEGERππ  !     push    DS                      ;ππ  !     lds     SI, [BP+8]              ; point DS:SI to request packetπ  !     les     DI, [BP+12]             ; point ES:DI to reply packetπ  !     mov     AH, Byte Ptr Service    ; put service in AHπ  !     xor     AL, AL                  ; clear ALπ  !     int     &H21                    ; call API through DOSππ  !     xor     BX, BX                  ; clear BXπ  !     mov     AH, BH                  ; clear AHπ  !     or      AL, AL                  ; we're we successful?π  !     jnz     Done                    ; yes, exitπ  !     dec     BX                      ; make it -1πDone:π  !     mov     AX, BX                  ; put return code in AXππ  !     pop     DS                      ;ππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovCVIπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovCVI(BYVAL string) AS INTEGERπ' DESC:    Converts a Novell style integer into an IEEE integer.π' EXAMP:   User = NovCVI( User.Object )π'πFUNCTION NovCVI(BYVAL x AS STRING) AS INTEGERππ  DIM y AS LOCAL INTEGERππ  y = CVI(x)ππ  ! mov  AX, yπ  ! xchg AL, AHπ  ! mov  y, AXππ  FUNCTION = yππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovCVLπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovCVL(BYVAL string) AS LONGπ' DESC:    Converts a Novell style long into an IEEE long.π' EXAMP:   User = NovCVL( User.Object )π'πFUNCTION NovCVL(BYVAL x AS STRING) AS LONGππ  DIM y AS LOCAL LONGππ  y = CVL(x)ππ  ! mov  AX, y[0]π  ! mov  BX, y[2]π  ! mov  y[0], BXπ  ! mov  y[2], AXππ  FUNCTION = yππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovMKIπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovMKI(BYVAL integer) AS STRINGπ' DESC:    Converts an IEEE style integer into a Novell integer.π' EXAMP:   User.Object = NovMKI(255)π'πFUNCTION NovMKI(BYVAL x AS INTEGER) AS STRINGππ  ! mov  AX, xπ  ! xchg AL, AHπ  ! mov  x, AXππ  FUNCTION = MKI$(x)ππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovMKLπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovMKL(BYVAL long) AS STRINGπ' DESC:    Converts an IEEE style long into a Novell long.π' EXAMP:   User.Object = NovMKL(255)π'πFUNCTION NovMKL(BYVAL x AS LONG) AS STRINGππ  ! mov  AX, x[0]π  ! mov  BX, x[2]π  ! mov  x[0], BXπ  ! mov  x[2], AXππ  FUNCTION = MKL$(x)ππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovConnectionπ' AUTHOR:  Greg Shultzπ' DECLARE: FUNCTION NovConnection() AS INTEGERπ' DESC:    Return the connection number for the current workstation.  Ifπ'          zero is returned, the workstation is not logged into a server.π' EXAMP:   PRINT "Current connection number:"; NovConnectionπ'πFUNCTION NovConnection () AS INTEGERππ  ! mov  AX, &HDC00              ; get connection idπ  ! int  &H21                    ; through DOSπ  ! xor  AH, AH                  ; clear AHπ  ! mov  FUNCTION, AX            ; return resultππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovOpenBinderyπ' AUTHOR:  Greg Shultzπ' DECLARE: FUNCTION NovOpenBinery() AS INTEGERπ' DESC:    Returns true (-1) if the bindery was successfully opened.π'πTYPE OpenBinderyRequestπ  Length  AS WORD   '0001π  Service AS BYTE   'subfunc 45hπEND TYPEππTYPE OpenBinderyReplyπ  Empty   AS WORD   'nothing is returnedπEND TYPEππFUNCTION NovOpenBindery () AS INTEGERππ  DIM Request AS OpenBinderyRequestπ  DIM Reply   AS OpenBinderyReplyππ  Request.Length  = 1π  Request.Service = &H45π  Reply.Empty     = 0ππ  FUNCTION = NovellAPI(&HE3, Request, Reply)ππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovCloseBinderyπ' AUTHOR:  Greg Shultzπ' DECLARE: FUNCTION NovCloseBinery() AS INTEGERπ' DESC:    Returns true (-1) if the bindery was successfully closed.π'πTYPE CloseBinderyRequestπ  Length  AS WORD   '0001π  Service AS BYTE   'subfunc 44hπEND TYPEππTYPE CloseBinderyReplyπ  Empty   AS WORD   'nothing is returnedπEND TYPEππFUNCTION NovCloseBindery () AS INTEGERππ  DIM Request AS CloseBinderyRequestπ  DIM Reply   AS CloseBinderyReplyππ  Request.Length  = 1π  Request.Service = &H44π  Reply.Empty     = 0ππ  FUNCTION = NovellAPI(&H3E, Request, Reply)ππEND FUNCTIONπππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PROC:    NovLogOutAllπ' AUTHOR:  Dave Navarro, Jr.π' DECLARE: FUNCTION NovLogOutAll() AS INTEGERπ' DESC:    Logs the current workstation out of all attached servers.  Returnsπ'          true (-1) if successful.π' EXAMP:   CALL NovLogOutAllπ'πFUNCTION NovLogOutAll () AS INTEGERππ  ! mov  AX, &HD700π  ! int  &H21π  ! xor  AH, AHπ  ! mov  FUNCTION, AXππEND FUNCTIONπDave Navarro, Jr.              RETURNS DESQVIEW VERSION       comp.lang.basic.misc           04-16-96 (06:58)       PB32                   40   1511     DESQVER.BAS '> π'> I search a method for detect DesqView and others populars multitask if present.ππ' DesqviewVer routine for PowerBASIC 3.2 or laterπ' Donated to the Public Domain by Dave Navarro, Jr.π'π' DESCRIPTION:π'   Return the version of DesqView installed.π'π' EXAMPLE"π'   DECLARE FUNCTION DesqviewVer() AS INTEGERπ'   IF ISTRUE(DesqviewVer) THENπ'     PRINT "DesqView version";DesqviewVer/100;" installed"π'   END IFππFUNCTION DesqviewVer () AS INTEGERππ  ! push    DS                      ; save DSππ  ! mov     AX, &H1022              ; DesqView API Callπ  ! xor     BX, BX                  ; clear BXπ  ! int     &H15                    ; through int 15π  ! or      BX, BX                  ; is DesqView installed?π  ! jne     NoDesq                  ; no, exitπ  ! mov     AX, BX                  ; put version into AXπ  ! push    AX                      ; save minor version number for laterπ  ! mov     CL, 100                 ; prepare to muliply AL * 100π  ! mul     CL                      ; AX = AL * CLπ  ! pop     BX                      ; retrieve minor versionπ  ! mov     BL, BH                  ; mov minor version to BLπ  ! xor     BH, BH                  ; zero out BHπ  ! add     AX, BX                  ; add major and minor partsπ  ! jmp     short Done              ;πNoDesq:π  ! xor     AX, AX                  ; clear EXπDone:π  ! mov     FUNCTION, AX            ; return version numberπ  ! pop     DS                      ; restore DSππEND FUNCTIONπDave Navarro, Jr.              ANSI VIEWER                    comp.lang.basic.misc           03-19-96 (23:10)       PB                     215  5113     ANSIVIEW.BAS'> Could anyone please EMail me a complete source code to view ANSIs? I'veπ'> attempted to code a function myslef but I have been unsuccessful. Thanks!π'> Please replyππ'Converted to PowerBASIC by Dave Navarro, Jr.π'This is a copyrighted file by Tom Hanlin which is included in theπ'shareware version of BASWIZ.ππDEFINT A - ZππFore = 7πBack = 0πSt$ = CHR$( 27 ) + "[2J"ππAnsiPrintChars St$ππOPEN "I", 1, "CHESS.ANS"π  WHILE NOT EOF( 1 )π    LINE INPUT#1, St$π    St$ = St$ + CHR$( 13, 10 )π    AnsiPrintChars St$π  WENDπCLOSE 1πππSUB AnsiPrintChars( BYVAL St$ )π  FOR disp = 1 TO LEN( St$ )π    ch$ = MID$( St$, disp, 1 )π    AnsiPrint ch$π  NEXTπEND SUBππSUB AnsiPrint( BYVAL Ch$ )ππ  STATIC ANSIst$, ANSIcode, Row, Col, SaveRow, SaveCol, Fore, Backπ  STATIC Firstπ  SHARED Musicππ  IF First = 0 THENπ    Fore = 7π    Back = 0π    First = -1π  END IFππ  IF ANSIcode THENπ    IF LEFT$( ANSIst$, 2 ) = "[M" THENπ      IF ASC( ch$ ) = 14 THENπ        IF Music THEN PLAY "MB" + MID$( ANSIst$, 4 )π        ANSIst$ = ""π        ANSIcode = 0π      ELSEπ        ANSIst$ = ANSIst$ + ch$π      END IFπ    ELSEIF INSTR( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", UCASE$( ch$ )) THENπ      SELECT CASE ch$π        CASE "A": GOSUB CursorUpπ        CASE "B": GOSUB CursorDownπ        CASE "C": GOSUB CursorRightπ        CASE "D": GOSUB CursorLeftπ        CASE "H", "f": GOSUB CursorLocateπ        CASE "s": GOSUB SaveCursorPosnπ        CASE "u": GOSUB RestCursorPosnπ        CASE "J": GOSUB BigEraseπ        CASE "K": GOSUB SmallEraseπ        CASE "h", "l": REM set display mode... ignoredπ        CASE "m": GOSUB SetColorsπ        CASE ELSEπ          PRINT ANSIst$;π          ANSIcode = 0π          ANSIst$ = ""π      END SELECTπ      ANSIst$ = ""π      ANSIcode = 0π    ELSEIF ASC( ch$ ) < = 32 OR LEN( ANSIst$ ) > 60 THENπ      PRINT ANSIst$;π      ANSIcode = 0π      ANSIst$ = ""π    ELSEπ      ANSIst$ = ANSIst$ + ch$π    END IFπ  ELSEIF ASC( ch$ ) = 27 THENπ    ANSIcode = -1π    ANSIst$ = ""π  ELSEIF ASC( ch$ ) = 13 THENπ    LOCATE CSRLIN, 1π  ELSEIF ASC( ch$ ) = 10 THENπ    Tmp = POS( 0 )π    PRINTπ    LOCATE, Tmpπ  ELSEπ    PRINT ch$;π  END IFπ  EXIT SUBππCursorUp:π  Tmp = VAL( MID$( ANSIst$, 2 ))π  IF Tmp < 1 THEN Tmp = 1π  LOCATE Row, Colπ  Row = Row - Tmpπ  IF Row < 1 THEN Row = 1π  LOCATE Row, Colπ  RETURNππCursorDown:π  Tmp = VAL( MID$( ANSIst$, 2 ))π  IF Tmp < 1 THEN Tmp = 1π  Row = CSRLINπ  Col = POS( 0 )π  Row = Row + Tmpπ  IF Row > 23 THEN Row = 23π  LOCATE Row, Colπ  RETURNππCursorLeft:π  Tmp = VAL( MID$( ANSIst$, 2 ))π  IF Tmp < 1 THEN Tmp = 1π  Row = CSRLINπ  Col = POS( 0 )π  Col = Col - Tmpπ  IF Col < 1 THEN Col = 1π  LOCATE Row, Colπ  RETURNππCursorRight:π  Tmp = VAL( MID$( ANSIst$, 2 ))π  IF Tmp < 1 THEN Tmp = 1π  Row = CSRLINπ  Col = POS( 0 )π  Col = Col + Tmpπ  IF Col > 80 THEN Col = 80π  LOCATE Row, Colπ  RETURNππCursorLocate:π  Row = VAL( MID$( ANSIst$, 2 ))π  Tmp = INSTR( ANSIst$, ";" )π  IF Tmp THENπ    Col = VAL( MID$( ANSIst$, Tmp + 1 ))π  ELSEπ    Col = 1π  END IFπ  IF Row < 1 THENπ    Row = 1π  ELSEIF Row > 25 THENπ    Row = 25π  END IFπ  IF Col < 1 THENπ    Col = 1π  ELSEIF Col > 80 THENπ    Col = 80π  END IFπ  LOCATE Row, Colπ  RETURNππSaveCursorPosn:π  SaveRow = CSRLINπ  SaveCol = POS( 0 )π  RETURNππRestCursorPosn:π  IF SaveRow > 0 THENπ    LOCATE SaveRow, SaveColπ  END IFπ  RETURNππBigErase:π  CLSπ  LOCATE 1, 1π  RETURNππSmallErase:π  LOCATE Row, Colπ  PRINT SPACE$( 80 - Col );π  LOCATE Row, Colπ  RETURNππSetColors:π  ANSIst$ = MID$( ANSIst$, 2 )π  DO WHILE LEN( ANSIst$ )π    Tmp = VAL( ANSIst$ )π    SELECT CASE Tmpπ      CASE 0: Fore = 7: Back = 0 'reset colorsπ      CASE 1: Fore = ( Fore OR 8 ) 'high intensityπ      CASE 2: Fore = ( Fore AND &H17 ) 'normal intensityπ      CASE 5: Fore = ( Fore OR 16 ) 'blinkπ      CASE 7: Fore = 0: Back = 7 'reverse videoπ      CASE 8: Fore = 0: Back = 0 'invisibleπ      CASE 30: Fore = ( Fore AND &H18 ) 'black foregroundπ      CASE 31: Fore = ( Fore AND &H18 ) OR 4 'red foregroundπ      CASE 32: Fore = ( Fore AND &H18 ) OR 2 'green foregroundπ      CASE 33: Fore = ( Fore AND &H18 ) OR 6 'yellow foregroundπ      CASE 34: Fore = ( Fore AND &H18 ) OR 1 'blue foregroundπ      CASE 35: Fore = ( Fore AND &H18 ) OR 5 'magenta foregroundπ      CASE 36: Fore = ( Fore AND &H18 ) OR 3 'cyan foregroundπ      CASE 37: Fore = ( Fore OR 7 ) 'white foregroundπ      CASE 40: Back = 0 'black backgroundπ      CASE 41: Back = 4 'red backgroundπ      CASE 42: Back = 2 'green backgroundπ      CASE 44: Back = 6 'yellow backgroundπ      CASE 44: Back = 1 'blue backgroundπ      CASE 45: Back = 5 'magenta backgroundπ      CASE 46: Back = 3 'cyan backgroundπ      CASE 47: Back = 7 'white backgroundπ      CASE ELSE 'ignore anything weirdπ    END SELECTπ    Tmp = INSTR( ANSIst$, ";" )π    IF Tmp THENπ      ANSIst$ = MID$( ANSIst$, Tmp + 1 )π    ELSEπ      ANSIst$ = ""π    END IFπ  LOOPπ  COLOR Fore, Backπ  RETURNπEND SUBπJames Goldbloom                PERCENTAGE BAR ROUTINE         FidoNet QUIK_BAS Echo          03-08-96 (00:00)       PB                     138  6502     BAR.BAS     'I wrote this originally for Power Basic, but I've decided to link up to thisπ'echo and share some PB code which could easily be adapted to QB, andπ'is useful for some...ππ'I decided to share one of my routines with you nifty people, so I formattedπ'it for this echo area and included help and tips, etc.  It's a completeπ'program which demonstrates a fully graphical percentbar for use in anyπ'of your programs which do lots of loops and activities requiring aπ'percentage of completion, etc.  It works forwards or backwards, canπ'be told to use numerical values in the display or not, and can alsoπ'be used to display instant percentbars without needing to loop at all!π'This routine works decently, and can be called within your loops toπ'show progress bars during copies, disk reads, alphabetizing, etc.,π'in a totally GRAPHICAL manner at any nearly any position on the screenπ'with the width and numerical display programmer defined!ππ'It's really neat, and I spent only marginal time creating it.  Itπ'also restores the previous color/cursor position from where the routineπ'was called, so NO need to worry with that stuff.  It's something Iπ'am most proud of, and also - it's fast.  Thanks to Brian who earlierπ'posted tips on screen color restore, showing we all share but giveπ'credit where credit is due.ππ'You can supply the width,x,y positions and other criteria like a normalπ'function, and tie it into loops to display real time percentbars.ππ'The output will resemble this (for example):ππ'┌─────────────────┤500/1000├──────────────────┐π'│50%  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓■■■■■■■■■■■■■■■■■■■■│π'└─────────────────────────────────────────────┘ππ'┌─────────────────────────────────────────────┐π'│50%  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓■■■■■■■■■■■■■■■■■■■■│π'└─────────────────────────────────────────────┘ππ'The first one shows the graphics bar (the progress graphics reallyπ'are spaces, but for purposes of this echo msg, are graphical boxes instead)π'WITH numerical values displayed, the second without.  Note that theπ'numerical displays automatically format the box, so the output is cleanπ'and does not include unnecessary spaces and so forth.  Cool, huh?ππ' PERCENTAGE BAR ROUTINE - WORKS FORWARD OR BACKWARDS OR STATIC VALUE!π' by JAMES GOLDBLOOM with color restore method courtesy of Brian McLaughlinπ' Public domain code - distribute freely and enjoy (3/8/96 PB 3.x)ππ' Syntax shown below:π'π' call percentbar (valuebar,lowbar,highbar,ybar,xbar,widthbar,showvalues)π'π' Where:  valuebar    =    current value of operation within the rangeπ'         lowbar      =    lowest possible (or beginning) value of rangeπ'         highbar     =    highest possible (or ending) value of rangeπ'         ybar        =    cursor line to place percentbar (y axis)π'         xbar        =    corsor row to place percentbar (x axis)π'         widthbar    =    width of percentbar dots (in columns) (max 72)π'                          and suggest values: 12,18,40,50,72 (they work.)π'         showvalues  =    0|1 (1 to display current/high valuees, 0=off)π'π' All values should be positive, but decimals are allowed.  Widthbarπ' seems to look the nicest at 72 (which is the limit.) Remember to freezeπ' the cursor by suffixing print/screen output statements with semi-colonsπ' to preserve the colors and x,y positions properly within your loops.π'π' Use this routine for progress display during file/dir. reads or ANY loopπ' operations by merely calling it using data from YOUR loops fed into it!π' Shows actual percentage (0-100%) to left of bar, automatically!π' Last color attribute/screen x,y position automatically preserved on exit!π' Work with high to low ranges, or low to high ranges (try it backwards!)π' Loops not required, you can optionally show a bar with "50%" instantly!π'π' See the example below, mess with the ranges...ππclsπcolor 11,0πprint "PERCENT BAR Stupid but Powerful Demonstration...."πprintπprint "This is an instant loop, 50%:";πcall percentbar (50,1,100,csrlin,pos+2,36,0)πlocate 7,1πprint "Another instant loop (values shown), 75%:";πcall percentbar (75,1,100,csrlin,pos+2,20,1)πlocate 11,1πprint "THIS PROGRAM CAN ALSO BE USED WITHIN LOOPS, FOR/NEXT'S, ETC.!"πprint:print "A good range to test would be 1 to 10000"πprint "And you can work backwards, too, such as 10000 to 1!":printπinput "Type in starting number";begin:if begin=0 then endπinput "Type in ending number";finish:if finish=0 then endπdirection=1:if begin>finish then direction=-1πfor count=begin to finish step directionπlocate 19,1:color 10:print"Current loop value:"count"...";πcall percentbar (count,begin,finish,23,1,72,1)πnext countπprint" Finished!"πprint "Nifty, huh?  Examine the code, see how it was done!"πendπππ'BELOW IS THE SUB ROUTINE...ππ'-----------------------------------------------------------------------π'PERCENTBAR Sub-Routine written by James Goldbloom 1:109/611@Fidonet.orgπ'-----------------------------------------------------------------------π'π'Example:  percentbar (50,1,100,24,1,72)  <-- Display a 50% bar at bottom!π'                                             of screen!π'πSUB PERCENTBAR (valuebar,lowbar,highbar,ybar,xbar,widthbar,showvalues)πoldy=csrlin:oldx=pos(0):if oldx=1 then oldx=2 else if oldx=80 then oldx=81πif widthbar>72 then widthbar=72πfore%=screen(oldy,oldx-1,1)πback%=fore%:fore%=fore% and 15:shift right back%,4πif lowbar>highbar then swap highbar,lowbarπpercentage=int((valuebar/highbar)*100)πlocate ybar,xbar:color 9,0πif showvalues=0 then print chr$(218)repeat$(widthbar+5,chr$(196))chr$(191);πif showvalues=1 thenπ  tempbar$=mid$(str$(valuebar),2)+"/"+mid$(str$(highbar),2)π  print chr$(218)repeat$(int(widthbar/2)-1,chr$(196))chr$(180);:color 15π  print tempbar$;:color 9:print chr$(195);π  print repeat$(widthbar-((widthbar/2)+len(tempbar$))+4,chr$(196))chr$(191);πend ifπlocate ybar+1,xbar:color 9:πprint chr$(179);:color 14πprint mid$(str$(percentage),2)"%"space$(5-len(str$(percentage)));πdrawbar=int((widthbar*percentage)/100)πlocate ybar+1,xbar+6:color 1,1:print repeat$(drawbar,chr$(32));πif (widthbar-drawbar)<>1 thenπ color 11,0:print repeat$(widthbar-drawbar,chr$(254));π color 9:print chr$(179);πend ifπcolor 9,0:locate ybar+2,xbarπprint chr$(192)repeat$(widthbar+5,chr$(196))chr$(217);πEXITBAR:πlocate oldy,oldx:color fore%,back%πtempbar$="":tempbar=0:tempbarlength=0πdrawbar=0:percentage=0:ybar=0:xbar=0πEND SUBπDave Navarro, Jr.              SWAP ARRAYS IN PB              comp.lang.basic.misc           04-04-96 (06:50)       PB                     94   3029     SWAPARRY.BAS'  The following example shows how useful ArrayInfo() is.π'π'  It will allow you to completely swap two arrays of like type andπ'  element size.π'π'  Swapping each element individually is slow, and all we really need toπ'  do is swap the array descriptors.π'π'  Use at your own risk!π'π'  Donated to the Public Domainπ'  by Dave Navarro, Jr.ππ%TotalElements   = 1π%ElementSize     = 2π%ElementsPerPage = 3π%ArrayType       = 4π%SubscriptCount  = 5ππDEFINT A-ZππDECLARE FUNCTION ArrayInfo(BYVAL Code%, BYVAL Pointr AS DWORD) AS LONGππDIM X(1:5)πDIM Y(1:5)ππX(1) = 200            'assign a value to the first element of XππPRINT X(1), Y(1)      'print the value of X(1) and Y(1)ππArraySwap X(), Y()    'Do NOT use element numbers.  Empty parenthesisπ                      ' tell PowerBASIC to pass the array descriptor.ππPRINT X(1), Y(1)      'print the value of X(1) and Y(2), should be swappedππENDππSUB ArraySwap(ANY, ANY) PUBLICππ  DIM Pointer1 AS DWORDπ  DIM Pointer2 AS DWORDπ  DIM Temp AS STRING * 64ππ  ! push DSππ  ! les  DI, [BP+10]           ;get pointer to first arrayπ  ! mov  Pointer1[0], DI       ;store offset in Pointer1π  ! mov  Pointer1[2], ES       ;store segment in Pointer1ππ  ! les  DI, [BP+6]            ;get pointer to second arrayπ  ! mov  Pointer2[0], DI       ;store offset in Pointer2π  ! mov  Pointer2[2], ES       ;store segment in Pointer2ππ  ! pop  DSππ  'If either array is not dimensioned, then exitπ  IF (ArrayInfo(%TotalElements, Pointer1) * ArrayInfo(%TotalElements, Pointer2)) = 0 THENπ    EXIT SUBπ  END IFππ  'If both array types match, swap the descriptorsπ  ' make sure the element sizes are the same in case of fixed lengthπ  IF (ArrayInfo(%ArrayType, Pointer1) = ArrayInfo(%ArrayType, Pointer2)) AND (ArrayInfo(%ElementSize, Pointer1) = ArrayInfo(%ElementSize, Pointer2)) THENππ     ! push DSππ     ! lds  SI, [BP+6]         ;point to second arrayπ     ! lea  BX, Temp           ;point BX at Temp bufferπ     ! mov  DI, BX             ;put offset in DIππ     ! push DI                 ;save offset for laterπ     ! push SS                 ;save segment for laterππ     ! push SS                 ;push stack segment on the stackπ     ! pop  ES                 ;and put it in ESπ     ! mov  CX, 32             ;descriptor is 32 words longπ     ! rep  movsw              ;copy descriptor to temp bufferππ     ! lds  SI, [BP+10]        ;point to first arrayπ     ! les  DI, [BP+6]         ;point to second arrayπ     ! mov  CX, 32             ;descriptor is 32 words longπ     ! rep  movsw              ;copy first descriptor to second descriptorππ     ! les  DI, [BP+10]        ;point to first arrayπ     ! pop  DS                 ;restore segment of Temp bufferπ     ! pop  SI                 ;restore offset of Temp bufferπ     ! mov  CX, 32             ;descriptor is 32 words longπ     ! rep  movsw              ;copy second descriptor to first descriptorππ     ! pop  DSππ  END IFππEND SUBπMike Huff                      MIDI CODE FOR THE SBSIM        FidoNet QUIK_BAS Echo          03-23-96 (00:04)       QB, PDS                28   998      MIDI.BAS    'Here's some of the MIDI code for the SBSIM (Sound Blaster Simplified Interfaceπ'Module) driver. It plays in the background (of course).π'Make sure to load SBMIDI.EXE first then load SBSIM.COM next.π'Ohh, and also make sure SBSIM say driver using interrupt 81h or whatever, butπ'make sure you see an "81h" when you load SBSIM or your machine will probablyπ'crash. This code can easily be modified to play CMFs, VOCs, and can be used toπ'control the mixer.ππ' $INCLUDE: 'QB.BI'πDIM InRegs AS RegType, OutRegs AS RegTypeπFilename$ = "JAZZ.MID" + CHR$(0) 'make ASCIIZ stringππ' this initializes the driver and loads the MIDI.πInRegs.ax = SADD(Filename$)πInRegs.bx = 0 + 5 * 256πInRegs.dx = VARSEG(Filename$)πInterrupt &H81, InRegs, OutRegsπIF NOT OutRegs.ax THEN PRINT "MIDI sucessfully started!"ππ' this starts playing the MIDI.πInRegs.bx = 1 + 5 * 256πInterrupt &H81, InRegs, OutRegsππSLEEPππ' this stops the MIDI.πInRegs.bx = 2 + 5 * 256πInterrupt &H81, InRegs, OutRegsπDave Navarro, Jr.              PB .WAV PLAYER                 www.powerbasic.com/source      03-27-96 (00:00)       PB                     107  3757     PLAYWAVE.BAS'=============================================================================π'                   Source code snippet: PowerBASIC for DOSπ'π' Original found at http://www.fys.ruu.nl/~bergmann/basic.htmlπ' converted to PowerBASIC by Dave Navarro, Jr.π' additional work by unknown author on CompuServeπ'π' Play wave files through the SoundBlaster.π'π'=============================================================================ππDEFINT A-ZππMaxTicks& = 1193180πSHARED WritePort%, MaxTicks&ππ'-Div.Init (maybe you get the filename from command line?πCLSπFILES ("*.WAV")πINPUT "Select Wave File"; VocFile$πVocFile% = FREEFILEππ'-open the voc-fileπOPEN VocFile$ FOR BINARY AS #VocFile%ππTestPort$ = ENVIRON$("BLASTER")πIF TestPort$ > "" THENπ  PortAddress$ = "&H" + MID$(TestPort$, 2, 3)π  PortAddress = VAL(PortAddress$)π  WritePort = PortAddress + 12πELSEπ  WritePort = &H22CπEND IFππ'-parameters for copy-to-soundblasterπBytes& = LOF(VocFile%)                 'number of bytesπX$ = SPACE$(40) 'riff file header stuffπGET #VocFile, , X$πSpeed = ASC(MID$(X$, 26, 1)) * 256 OR ASC(MID$(X$, 25, 1))ππ'Playrate in Bytes per second.π'We are assuming an 8 bit *.Wav File Hereπ' And my 386-16 will hang in there at 11025 BPS under DOSπClocks = MaxTicks& \ Speed 'using an integer divide. Close enoughπ                           'and doesn't pull in floating point math packπ                           'Maxticks are for the "normal" PC Clock atπ                           '18.206 + ticks per second.π                           'We'll use this to time the play rate.πBytes& = Bytes& - 40πBytesRemaining& = Bytes&               'number of remaining bytesπBufferMax% = &H3F00                    'largest bufferπBuffer$ = SPACE$(BufferMax%)           'create bufferπSetVoice 1                             'Soundblaster onππ'-read {BufferMax%} bytes from disc, output on SBπDOπ  BytesRemaining& = BytesRemaining& - BufferLen%π  IF BytesRemaining& = 0 THEN EXIT DO  'nothing left over?π  IF BytesRemaining& > BufferMax% THEN 'how many bytes?π    BufferLen% = BufferMax%π  ELSEπ    BufferLen% = BytesRemaining&       'remaining (<BufferMax%)..π    Buffer$ = SPACE$(BufferLen%)       '..throw it into SB :-)π  END IFππ  GET #VocFile%, , Buffer$             'read buffeerπ  T = 0π  DEF SEG = STRSEG(Buffer$)π  K = STRPTR(Buffer$)π  OUT &H43, &H34 'PIT Timer select one shot then we can let theπ  OUT &H40, 0  'clock keep up.π  OUT &H40, 0  ' set the clock to 0 and start the count downπ  Rate& = 65536 - Clocks 'First count down stopping valueπ                         ' "zero" - Rateπ  DO             'output od {bufferlen%}π     Char = PEEK(K + T)π     WAIT WritePort, &H80, &HFF             'wait for data-readyπ     OUT WritePort, &H10π     WAIT WritePort, &H80, &HFFπ     OUT WritePort, Char 'Direct DAC methodπ     T = T + 1π     DOπ      C& = (INP(&H40) + INP(&H40) * 256&) 'check the tickerπ    LOOP UNTIL C& <= Rate& 'end if it's at or below the ticks we allotedπ    Rate& = Rate& - Clocksπ    IF Rate& < 0 THENπ        OUT &H40, 0  'reset the ticker to 0π        OUT &H40, 0  'both bytesπ        Rate& = 65536 - Clocks  'Reset the Rate& valueπ    END IFπ  LOOP UNTIL T = BufferLen 'This is faster than a for next loopπ  OUT &H43, 4πLOOP UNTIL ForeverπSetVoice 0                             'SB offπCLOSE #VocFile%                        'close fileπEND                                    '.. good bye :-)ππ' Turns Speaker on and offπSUB SetVoice (OnOff%)π  IF OnOff% THENπ    WAIT WritePort%, &H80, &HFF             'wait for data-ready on SBπ    OUT WritePort%, &HD1 'ONπ  ELSEπ    WAIT WritePort%, &H80, &HFFπ    OUT WritePort%, &HD3 'OFFπ  END IFπEND SUBπMike Huff                      BACKGROUND WAV/VOC PLAY/RECORD MHuff@gnn.com                  03-30-96 (23:48)       QB, QBasic, PDS, VBDOS 377  10169    DMAPLAY.BAS ' DMA Playπ' By Mike Huff (1996)π' Audio file player that plays using the DMA channels.π' Runs in QBASIC, QuickBASIC, PDS, VBDOS, and even GW-BASIC!!! (If you addπ' line numbers and remove the SUBs, FUNCTIONS, and do a few other things.)π' Use DMADone% to detect the end of a transfer.π' Tested on a 486DX4-120mHz with a Reveal Sound FX card.πDECLARE FUNCTION SpeakerStatus% ()πDECLARE FUNCTION DMAStatus% ()πDECLARE FUNCTION DMADone% ()πDECLARE FUNCTION ResetDSP% ()πDECLARE SUB FMVolume (Right%, Left%, Getvol%)πDECLARE SUB VocVolume (Right%, Left%, Getvol%)πDECLARE SUB MasterVolume (Right%, Left%, Getvol%)πDECLARE SUB MicVolume (Gain%, Getvol%)πDECLARE SUB LineVolume (Right%, Left%, Getvol%)πDECLARE SUB CDVolume (Right%, Left%, Getvol%)πDECLARE SUB InputSource (InputSrc%, GetSrc%)πDECLARE SUB WriteDSP (byte%)πDECLARE SUB SetStereo (OnOff%)πDECLARE FUNCTION ReadDSP% ()πDECLARE SUB WriteDAC (byte%)πDECLARE SUB SpeakerState (OnOff%)πDECLARE SUB DMAState (StopGo%)πDECLARE FUNCTION ReadDAC% ()πDECLARE SUB DMAPlay (Segment&, Offset&, Length&, Freq&)πDECLARE SUB DMARecord (Segment&, Offset&, Length&, Freq&)πDECLARE SUB GetBLASTER (DMA%, BasePort%, IRQ%)πDECLARE FUNCTION DSPVersion! ()πCOMMON SHARED BasePort%, LenPort%, Channel%ππCLSπPRINT "DMAPlay"πPRINT "By Mike Huff"πPRINT "The first background WAV/VOC/etc player/recorder in BASIC I've ever seen"πPRINT "Use freely"πPRINT "Comments, etc. can be sent to MHuff@gnn.com or on FidoNet in the QUIK_BAS echo"πGetBLASTER Channel%, BasePort%, IRQ% ' Parses BLASTER environmentπPRINT STRING$(80, 196)πIF ResetDSP% THEN 'resets DSP (returns true if sucessful)π   PRINT "DSP reset sucessfully!"πELSEπ   PRINT "DSP failed to reset, try another port."πEND IFππSpeakerState 1 'turn the speaker onπPRINT "Sound Card DSP version:"; DSPVersion!ππMasterVolume Right%, Left%, -1 'this puts the mixer volumes in Right% and Left%πPRINT "Master volume is set at: Right-"; Right%; " Left-"; Left%πMasterVolume 15, 15, 0 'this cranks the master volume all the way up.ππDIM WavBuffer(1 TO 1) AS STRING * 32767 'Make a 32k buffer for file.πINPUT "WAV/VOC/SND file to play: ", Filename$πOPEN Filename$ FOR BINARY AS #1πGET #1, 44, WavBuffer(1) 'Get 32k from file (skip header on WAV)ππLength& = LOF(1) - 44πIF Length& > 32767 THEN Length& = 32767 'Adjust length if needed to 32kππINPUT "Frequency to play at: (1000-41000Hz)", Freq&πDMAPlay VARSEG(WavBuffer(1)), VARPTR(WavBuffer(1)), Length&, Freq&ππ'Use DMARecord to record in the background.π'and use DMAPlay to playback the same buffer you recorded to or you couldπ'even write the buffer to a file.π'DMARecord VARSEG(WavBuffer(1)), VARPTR(WavBuffer(1)), Length&, Freq&ππDOπCOLOR RND * 15πPRINT "Check it out! It's playing in the background!"πLOOP UNTIL DMADone%ππCLSπCOLOR 7πPRINT "DMA transfer completed!"ππSUB CDVolume (Right%, Left%, Getvol%)πOUT BasePort% + 4, &H28πIF Getvol% THENπ   Left% = INP(BasePort% + 5) \ 16π   Right% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπEND IFπEND SUBππFUNCTION DMADone%πCount% = INP(LenPort%)πCount2% = INP(LenPort%)πCount& = CLNG(Count% + 1) * CLNG(Count2% + 1)πIF (Count& - 1) >= &HFFFF& THEN junk% = INP(DSPDataAvail%): DMADone% = -1πEND FUNCTIONππSUB DMAPlay (Segment&, Offset&, Length&, Freq&)π' Transfers and plays the contents of the buffer.πLength& = Length& - 1πPage% = 0πMemLoc& = Segment& * 16 + Offset&πSELECT CASE Channel%π    CASE 0π       PgPort% = &H87π       AddPort% = &H0π       LenPort% = &H1π       ModeReg% = &H48π    CASE 1π       PgPort% = &H83π       AddPort% = &H2π       LenPort% = &H3π       ModeReg% = &H49π    CASE 2π       PgPort% = &H81π       AddPort% = &H4π       LenPort% = &H5π       ModeReg% = &H4Aπ    CASE 3π       PgPort% = &H82π       AddPort% = &H6π       LenPort% = &H7π       ModeReg% = &H4Bπ    CASE ELSEπ       PRINT "DMA channels 0-3 only are supported."π       EXIT SUBπEND SELECTππOUT &HA, &H4 + Channel%πOUT &HC, &H0πOUT &HB, ModeReg%πOUT AddPort%, MemLoc& AND &HFFπOUT AddPort%, (MemLoc& AND &HFFFF&) \ &H100πIF (MemLoc& AND 65536) THEN Page% = Page% + 1πIF (MemLoc& AND 131072) THEN Page% = Page% + 2πIF (MemLoc& AND 262144) THEN Page% = Page% + 4πIF (MemLoc& AND 524288) THEN Page% = Page% + 8πOUT PgPort%, Page%πOUT LenPort%, Length& AND &HFFπOUT LenPort%, (Length& AND &HFFFF&) \ &H100πOUT &HA, Channel%ππIF Freq& < 23000 THENπ   TimeConst% = 256 - 1000000 \ Freq&π   WriteDSP &H40π   WriteDSP TimeConst%π   WriteDSP &H14π   WriteDSP (Length& AND &HFF)π   WriteDSP ((Length& AND &HFFFF&) \ &H100)πELSEπ   IF DSPVersion! >= 3 THENπ      TimeConst% = ((65536 - 256000000 \ Freq&) AND &HFFFF&) \ &H100π      WriteDSP &H40π      WriteDSP TimeConst%π      WriteDSP (Length& AND &HFF)π      WriteDSP ((Length& AND &HFFFF&) \ &H100)π      WriteDSP &H91π   ELSEπ      PRINT "You need a Sound Blaster with a DSP v3.x+ to play at high speed."π      EXIT SUBπ   END IFπEND IFπEND SUBππSUB DMARecord (Segment&, Offset&, Length&, Freq&)πLength& = Length& - 1πMemLoc& = Segment& * 16 + Offset&πPage% = 0πSELECT CASE Channel%π    CASE 0π       PgPort% = &H87π       AddPort% = &H0π       LenPort% = &H1π       ModeReg% = &H44π    CASE 1π       PgPort% = &H83π       AddPort% = &H2π       LenPort% = &H3π       ModeReg% = &H45π    CASE 2π       PgPort% = &H81π       AddPort% = &H4π       LenPort% = &H5π       ModeReg% = &H46π    CASE 3π       PgPort% = &H82π       AddPort% = &H6π       LenPort% = &H7π       ModeReg% = &H47π    CASE ELSEπ       EXIT SUBπEND SELECTππOUT &HA, &H4 + Channel%πOUT &HC, &H0πOUT &HB, ModeReg%πOUT AddPort%, MemLoc& AND &HFFπOUT AddPort%, (MemLoc& AND &HFFFF&) \ &H100πIF (LongByte& AND 65536) THEN Page% = Page% + 1πIF (LongByte& AND 131072) THEN Page% = Page% + 2πIF (LongByte& AND 262144) THEN Page% = Page% + 4πIF (LongByte& AND 524288) THEN Page% = Page% + 8πOUT PgPort%, Page%πOUT LenPort%, Length& AND &HFFπOUT LenPort%, (Length& AND &HFFFF&) \ &H100πOUT &HA, Channel%ππIF Freq& <= 23000 THENπ   TimeConst% = 256 - 1000000 \ Freq&π   WriteDSP &H40π   WriteDSP TimeConst%π   WriteDSP &H24π   WriteDSP (Length& AND &HFF)π   WriteDSP ((Length& AND &HFFFF&) \ &H100)πELSEπ   IF DSPVersion! >= 3 THENπ      TimeConst% = ((65536 - 256000000 / Freq&) AND &HFFFF&) \ &H100π      WriteDSP &H40π      WriteDSP TimeConst%π      WriteDSP (Length& AND &HFF)π      WriteDSP ((Length& AND &HFFFF&) \ &H100)π      WriteDSP &H99π   ELSEπ      PRINT "You need a Sound Blaster with a DSP 3.x+ to record at high speed."π      EXIT SUBπ   END IFπEND IFππEND SUBππSUB DMAState (StopGo%)π' Stops or continues DMA play.πIF StopGo% THEN WriteDSP &HD4 ELSE WriteDSP &HD0ππEND SUBππFUNCTION DSPVersion!π' Gets the DSP version.πWriteDSP &HE1πTemp% = ReadDSP%πTemp2% = ReadDSP%πDSPVersion! = VAL(STR$(Temp%) + "." + STR$(Temp2%))πEND FUNCTIONππSUB FMVolume (Right%, Left%, Getvol%)πOUT BasePort% + 4, &H26πIF Getvol% THENπ   Left% = INP(BasePort% + 5) \ 16π   Right% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπEND IFπEND SUBππSUB GetBLASTER (DMA%, BasePort%, IRQ%)π' This subroutine parses the BLASTER environment string and returns settings.πIF LEN(ENVIRON$("BLASTER")) = 0 THEN PRINT "BLASTER environment variable not set.": EXIT SUBπFOR Length% = 1 TO LEN(ENVIRON$("BLASTER"))π   SELECT CASE MID$(ENVIRON$("BLASTER"), Length%, 1)π      CASE "A"π        BasePort% = VAL("&H" + MID$(ENVIRON$("BLASTER"), Length% + 1, 3))π      CASE "I"π        IRQ% = VAL(MID$(ENVIRON$("BLASTER"), Length% + 1, 1))π      CASE "D"π        DMA% = VAL(MID$(ENVIRON$("BLASTER"), Length% + 1, 1))π   END SELECTπNEXTππEND SUBππSUB InputSource (InputSrc%, GetSrc%)πOUT BasePort% + 4, &HCπIF GetSrc% THENπ   InputSrc% = INP(BasePort% + 5) AND 2 + INP(BasePort% + 5) AND 4πELSEπ   OUT BasePort% + 5, InputSrc% AND 7πEND IFπEND SUBππSUB LineVolume (Right%, Left%, Getvol%)πOUT BasePort% + 4, &H2EπIF Getvol% THENπ   Left% = INP(BasePort% + 5) \ 16π   Right% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπEND IFπEND SUBππSUB MasterVolume (Right%, Left%, Getvol%)πOUT BasePort% + 4, &H22π'PRINT BasePort%πIF Getvol% THENπ   Left% = INP(BasePort% + 5) \ 16π   Right% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπEND IFπEND SUBππSUB MicVolume (Volume%, Getvol%)πOUT BasePort% + 4, &HAπIF Getvol% THENπ   Volume% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, Volume% AND &HFπEND IFπEND SUBππFUNCTION ReadDAC%π' Reads a byte from the DAC.πWriteDSP &H20πReadDAC% = ReadDSP%ππEND FUNCTIONππFUNCTION ReadDSP%π' Reads a byte from the DSPπDOπLOOP UNTIL INP(BasePort% + 14) AND &H80πReadDSP% = INP(BasePort% + 10)πEND FUNCTIONππFUNCTION ResetDSP%π' Resets the DSPπOUT BasePort% + 6, 1πFOR Count% = 1 TO 4π   junk% = INP(BasePort% + 6)πNEXTπOUT BasePort% + 6, 0πIF INP(BasePort% + 14) AND &H80 = &H80 AND INP(BasePort% + 10) = &HAA THENπ   ResetDSP% = -1πELSEπ   ResetDSP% = 0πEND IFπEND FUNCTIONππSUB SetStereo (OnOff%)πOUT BasePort% + 4, &HEπIF OnOff% THEN OUT BasePort% + 5, 2 ELSE OUT BasePort% + 5, 0πEND SUBππSUB SpeakerState (OnOff%)π' Turns speaker on or off.πIF OnOff% THEN WriteDSP &HD1 ELSE WriteDSP &HD3πEND SUBππFUNCTION SpeakerStatus%πOUT BasePort% + 4, &HD8πIF INP(BasePort% + 5) = &HFF THEN SpeakerStatus% = -1 ELSE SpeakerStatus% = 0πEND FUNCTIONππSUB VocVolume (Right%, Left%, Getvol%)πOUT BasePort% + 4, &H4πIF Getvol% THENπ   Left% = INP(BasePort% + 5) \ 16π   Right% = INP(BasePort% + 5) AND &HFπ   EXIT SUBπELSEπ   OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπEND IFπEND SUBππSUB WriteDAC (byte%)π' Writes a byte to the DAC.πWriteDSP &H10πWriteDSP byte%πEND SUBππSUB WriteDSP (byte%)π' Writes a byte to the DSPπDOπLOOP WHILE INP(BasePort% + 12) AND &H80πOUT BasePort% + 12, byte%πEND SUBπAndrew Jones                   SOUND BLASTER OSCILLISCOPE     FidoNet QUIK_BAS Echo          04-14-96 (14:48)       QB, QBasic, PDS        88   1619     SBOSCILL.BAS'And here's my sound blaster oscilliscope.ππDEFINT A-ZπCLSπCOLOR 9πPRINT "NanoSoft Osci-Trip"πCOLOR 15πPRINT "Sound Blaster routines by Gary Maddox, obtained from SB-Digest Issue #5"πPRINTπ BPORT = &H210π XPORT = &H216π WPORT = &H21Cπ RPORT = &H21Aπ APORT = &H21Eπ READY = &HAAπDOπ   OUT XPORT, 1π π   FOR t = 0 TO 10π   ll! = TIMERπ   DOπ   LOOP WHILE ll! = TIMERπ   NEXTπ   OUT XPORT, 0π   loopctr = 0π   DOπ     byte = INP(RPORT)π     loopctr = loopctr + 1π   IF byte = &HAA THEN EXIT DOπ   IF loopctr > 100 THEN EXIT DOπ   LOOPπ   IF byte <> &HAA THENπ     BPORT = BPORT + &H10π     XPORT = XPORT + &H10π     WPORT = WPORT + &H10π     RPORT = RPORT + &H10π π     APORT = APORT + &H10π   END IFπ IF byte = &HAA THEN EXIT DOπ IF RPORT = &H270 THEN EXIT DOπ LOOPπ π IF BPORT = &H270 THENπ   PRINT "Sound Blaster Not Found!"π   STOPπ ELSEπ   PRINT "Sound Blaster Installed at Port:"; HEX$(BPORT)π END IFπ  PRINT "Press a key, press escape to quit."π  DOπ  LOOP UNTIL LEN(INKEY$)π  SCREEN 13π  ext = FALSEπFOR t = 0 TO 199πLINE (0, t)-(319, t), tπNEXTπFOR x = 0 TO 319 STEP 40πFOR y = 0 TO 199 STEP 40πFOR v = 0 TO 20πCIRCLE (x + 20, y + 20), v, 200 - (v + y)πCIRCLE (x + 21, y + 20), v, 200 - (v + y)πNEXTπNEXTπNEXTπ πDOπ    OUT &H3C8, 1π    FOR t = 1 TO 200 STEP 10π    OUT WPORT, &H20π πbyte = INP(RPORT)πFOR x = 0 TO 10πOUT &H3C9, byte + (x * 6)πOUT &H3C9, (byte + (x * 6)) \ 2πOUT &H3C9, (byte + (x * 6)) \ 4πNEXTπNEXTπ πIF INKEY$ = CHR$(27) THEN ext = 1π'lastbyte = byteπLOOP UNTIL extπSCREEN 0πWIDTH 80πCLSπPRINT "Bye."πENDππDaniel Minty                   SOUND AFFECTS                  bminty@agso.gov.au             04-23-96 (07:15)       QB, QBasic, PDS        131  3150     SAFFECTS.BAS'Sound Effectsπ'Mostly made by Daniel Minty e-mail:  bminty@agso.gov.auπ'OR home page: (http://wsite.com/Daniel/index.html)πCLSπPRINT "0"π0 PLAY "MBO0L32EFGEFDC"πSLEEPπPRINT "1"π1 PLAY "T120L16MLO3BF#"πSLEEPπPRINT "2"π2 PLAY "T255L64MLO4BAGFEDC<BAGFEDEC<BAGFEDC<BAGFEDC<BAGFEDC"πSLEEPπPRINT "3"π3 PLAY "T255L32O4mlDGD<G>DGDDGDGBAGF#EE"πSLEEPπPRINT "4"π4 PLAY "T255L64MLO2BCADGEFEGDACBCADGEFEGDACB"πSLEEPπPRINT "5"π5 PLAY "T255L64MLO3BCADGEFEGDACBCADGEFEGDACB"πSLEEPπPRINT "6"π6 PLAY "T255L64MLO4BCADGEFEGDACBCADGEFEGDACB"πSLEEPπPRINT "7"π7 PLAY "T255L64MLO5BCADGEFEGDACBCADGEFEGDACB"πSLEEPπPRINT "8"π8 PLAY "T150L64MSO4BGEC<AFL16D"πSLEEPπPRINT "9"π9 PLAY "T150L64MSO4BFC<GD<AL16E"πSLEEPπPRINT "10"π10 PLAY "T150L64MSO4BE<AD<GC<L32F"πSLEEPπPRINT "11"π11 PLAY "T150L64MSO3DFA>CEGL16B"πSLEEPπPRINT "12"π12 PLAY "T120L64MSO2E.A.>D.G.>C.F.B."πSLEEPπPRINT "13"π13 PLAY "T150L64MSO0F>CG>DA>EB."πSLEEPπPRINT "14"π14 PLAY "T240L64MLO4EGEGEGCFCFCFGEGEGE"πSLEEPπPRINT "15"π15 PLAY "T255L64O4CDEFGABO3CDEFGABO2CDEFGAB"πSLEEPπPRINT "16"π16 PLAY "T255L64MLO1BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"πSLEEPπPRINT "17"π17 PLAY "T255L64MLO2BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"πSLEEPπPRINT "18"π18 PLAY "T255L64MLO3BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"πSLEEPπPRINT "19"π19 PLAY "T255L64MLO4BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"πSLEEPπPRINT "20"π20 PLAY "T255L64MLO1CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"πSLEEPπPRINT "21"π21 PLAY "T255L64MLO2CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"πSLEEPπPRINT "22"π22 PLAY "T255L64MLO3CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"πSLEEPπPRINT "23"π23 PLAY "T255L64MLO4CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"πSLEEPπPRINT "24"π24 PLAY "T120L16O4C#.P16T255L64mlC#DD#EFF#GG#AA#BO5CC#DD#EF"πSLEEPπPRINT "25"π25 PLAY "T255L32mlO3CD<CD>>CD<<CD>>CD<<CD>CD"πSLEEPπPRINT "26"π26 PLAY "T240L64MLO4EGEGEGEGEGEGEGEGEGEGEGEGEGEGEG"πSLEEPπPRINT "27"π27 PLAY "O4T255L64MLB-BB-BAGAG.>EGG>EGG"πSLEEPπPRINT "28"π28 PLAY "T200L64MLO4C#DD#EFF#GG#AA#B>CC#DD#EFP8.<C#DD#EFF#GG#AA#B>CC#DD#EFED#DC#"πSLEEPπPRINT "29"π29 PLAY "T255L64MsO4C#DD#EFF#GG#AA#B>CC#DD#EF"πSLEEPπPRINT "30"π30 PLAY "MBO0L32EFGEFDC"πSLEEPπPRINT "31"π31 PLAY "MBO2l32abebcfdfg"πSLEEPπPRINT "32"π32 PLAY "T120L16O4C#.P16T255L64mlC#DD#EFF#GG#AA#BO5CC#DD#EF#T120L16O4C.P16T255L64mlCDDEFFGGAABO5CCDDEF"πSLEEPπPRINT "33"π33 PLAY "T2553L64MSO4CDDEFFGGAABCCDDEF"πSLEEPπPRINT "34"π34 PLAY "T240L64MLO4CECECECECECECADADADADADADADADADFGFGFGFGFGFGFG"πSLEEPπPRINT "35"π35 PLAY "T2553L64MSO4CDEFGACDEFGACDEFGACDEFGACDEFGACDEFGACDEFGA"πSLEEPπPRINT "36"π36 PLAY "T240L64MLO4CECECECECECECECECECP2CECECECECECECECECECP1ECECECCECECECECECECP2CECECECECECECECECEC"πSLEEPπPRINT "37"π37 PLAY "T255L64MLO3ABCDEFG<ABCDEFG<ABCDEFG<ABCDEFG<ABCDEFG<ABCDEFG"πSLEEPπPRINT "38"π38 PLAY "T255L64MLO3ABCDEFGFEDCBABCDEFGFEDCBABCDEFGFEDCBABCDEFGFEDCBABCDEFGFEDCBA"πSLEEPπPRINT "39"π39 PLAY "MBO0L32cdcdcdcdcdcdcdcdcdcdcd"πSLEEPπPRINT "40"π40 PLAY "O4T255L64MLaaaabbbbccccddddeeeeffffggggffffeeeeddddccccbbbbaaaa"πSLEEPπPRINT "41"π41 PLAY "T255L32mlO3abcdefgabcdefgabcdefgabcdefgabcdefgabcdefg"πSLEEPππAlexander Podkolzin            SIMPLE FILE BROWSER            APP@nw.sbank.e-burg.su         02-29-96 (14:39)       PB32                   267  7463     BRWSFILE.BAS'--------------------------------------------------------------------------π' Simple File Browser. Author: Alexander Podkolzin <APP@nw.sbank.e-burg.su>π' Use it as you want...π' PowerBASIC 3.2π'--------------------------------------------------------------------------π$CPU 8086π$OPTIMIZE SIZEπ$COMPILE EXEπ$DEBUG MAP OFFπ$DEBUG PBDEBUG OFFπ$LIB ALL       OFFπ$ERROR ALL     OFFπ$COM    0π$STRING 4π$STACK  2048π$SOUND  1π$DIM ARRAYπ$DYNAMICπ$OPTION CNTLBREAK OFFπ'--------------------------------------------------------------------------π  %MaxLines = 5000                      ' Max strings to showπ  %MaxLen=240                           ' Max LEN of a stringπ'π  DEFINT a-zπ  DIM txt$(%MaxLines)π'π  InsKey$=CHR$(0,82)                    ' Key codesπ  Enter$=CHR$(13)π  Esc$ = CHR$(27)π  Home$ = CHR$(0,71)π  PgUp$ = CHR$(0,73)π  EndKey$ = CHR$(0,79)π  PgDn$ = CHR$(0,81)π  Up$ = CHR$(0,72)π  Down$ = CHR$(0,80)π  LeftKey$ = CHR$(0,75)π  RightKey$ = CHR$(0,77)π  CtrlPgUp$ = CHR$(0,132)π  CtrlPgDn$ = CHR$(0,118)π  CtrlHome$ = CHR$(0,119)π  CtrlEnd$ = CHR$(0,117)π'π  Twin%=1                               ' Win typeπ  xb%=1 : yb%=2 : xe%=80 : ye%=24       ' Edit window coordinatesπ'π  ct%=7                                 ' Main colorsπ  cb%=0                                 'π'π  FileName$ = COMMAND$                  ' File to editπ'π  IF NOT FileExists(FileName$) THENπ     PRINT "Command line <FileName> not found..."π     BEEPπ     ENDπ  END IFπ'π  src% = FREEFILEπ  OPEN FileName$ FOR INPUT AS src%π  i%=0π  DO WHILE EOF(src%)=0 AND i% < %MaxLinesπ     INCR i%π     LINE INPUT #src%,txt$(i%)π     IF txt$(i%)="" THEN txt$(i%)=" "π     REPLACE CHR$(9) WITH "        " IN txt$(i%)π  LOOPπ  CLOSE src%π  nlines%=i%π'π  COLOR 0,7π  LOCATE 1,1π  PRINT SPACE$(80);π  LOCATE 1,4π  PRINT "File = ";FileName$;π  LOCATE 25,1π  PRINT SPACE$(80);π'π  COLOR ct%,cb%π'π  lpage%=ye%-yb%-1π  CALL win(twin%,xb%,yb%,xe%,ye%,ct%,cb%)π  Aprint 3,ye%,"┤     :   =   ├"π'π  begx%=1π  begy%=1π  endy%=MIN(lpage%,nlines%)π  CurY%=1π  CurX%=1π  GOSUB ShowTextπ  GOSUB ShowCursorπ  DOπ     GOSUB ShowCursorπ     WHILE NOT INSTAT: WEND             ' begy% - first line to show,π     IF nlines%<1 THEN EXIT LOOP        ' endy% - last line to show (array)π     k$=INKEY$                          ' CurY%  - the cursor bar lineπ     SELECT CASE k$                     ' lpage%- length of window (page)π        CASE InsKey$π           : ITERATE LOOPπ        CASE Esc$π           : CurY%=0 : begy%=1:EXIT LOOPπ        CASE Enter$π           : EXIT LOOPπ        CASE Home$π           : CurX%=2 : begx%=1π        CASE EndKey$π           : l%=LEN(txt$(begy%+CurY%-1))π           : CurX%=MIN(l%+1,78)+1π           : endx%=MAX(l%+1,78)+1π           : begx%=endx%-78π        CASE Up$π           IF CurY%>1 THENπ              DECR CurY%π           ELSEπ              begy%=begy%-1π              endy%=endy%-1π           END IFπ        CASE Down$π           IF CurY%<lpage% THENπ              INCR CurY%π           ELSEπ              begy%=begy%+1π              endy%=endy%+1π           END IFπ        CASE LeftKey$π           IF CurX%>2 THENπ              DECR CurX%π           ELSEπ              begx%=begx%-1π              IF begx%<1 THEN begx%=1π           END IFπ        CASE RightKey$π           IF CurX% < 79 THENπ              INCR CurXπ              Show=0π           ELSEπ              INCR begxπ              IF begx >%MaxLen-79 THEN begx=%MaxLen-79π           END IFπ        CASE PgUp$π           : begy%=begy%-lpage%π           : endy%=endy%-lpage%π        CASE PgDn$π           : begy%=begy%+lpage%π           : endy%=endy%+lpage%π        CASE CtrlPgUp$π           : begy%=1π           : endy%=begy%+lpage%-1π           : CurX%=2π           : CurY%=1π        CASE CtrlPgDn$π           : endy%=nlines%π           : begy%=endy%-lpage%+1π           : CurX%=2π           : CurY%=21π        CASE CtrlHome$π           : CurY%=1π        CASE CtrlEnd$π           : CurY%=21π        CASE ELSEπ           : k$=""π     END SELECTπ     GOSUB ShowTextπ  LOOPπ  CLSπ  ENDπ'--------------------------------------------------------------------------ππShowText:π  CALL Numerer(nlines%,lpage%,begy%,endy%)π  GOSUB MakeRulerπ  FOR i%=begy% TO endy%π     Aprint xb%+1,yb%+i%-begy%+1,_π     MID$(txt$(i%)+SPACE$(xe%-xb%+1),begx%,78)π  NEXT i%π  RETURNπ'--------------------------------------------------------------------------ππShowCursor:π  LOCATE ye%,4,0π  PRINT RIGHT$("0000"+LTRIM$(STR$(begy%+CurY%-1)),5)π  LOCATE ye%,10,0π  PRINT RIGHT$("00"+LTRIM$(STR$(begx%+Curx%-2)),3)π  IF CurX%< 2 THEN CurX%= 2π  IF CurX%>79 THEN CurX%=79π  LOCATE ye%,14,0π  PRINT RIGHT$("00"+LTRIM$(STR$(SCREEN(CurY%+2,CurX%))),3)π  LOCATE yb%+CurY%,CurX,1π  RETURNπ'--------------------------------------------------------------------------ππMakeRuler:π  FOR i%=yb%+1 TO ye%-1π     Aprint xe%,i%,CHR$(177)π  NEXTπ  k%=((begy%+CurY%-1)/nlines%)*(ye%-yb%-1)π  IF k%=0 THEN k%=1π  Aprint xe%,yb%+k%,CHR$(219)π  RETURNπ'--------------------------------------------------------------------------π  SUB Numerer(nlines%,lpage%,begy%,endy%)π     IF nlines%<=lpage% THENπ        begy%=1π        endy%=nlines%π        EXIT SUBπ     END IFπ     IF begy%<1 THENπ        begy%=1π        endy%=begy%+lpage%-1π        EXIT SUBπ     END IFπ     IF begy%+lpage%-1>=nlines% THENπ        endy%=nlines%π        begy%=nlines%-lpage%+1π        EXIT SUBπ     END IFπ     endy%=begy%+lpage%-1π  END SUBπ'--------------------------------------------------------------------------π  SUB Win(t%,xb%,yb%,xe%,ye%,ct%,cb%)π'π     OldColor% = pbvScrnTxtAttr         ' Internal PB variableπ     SELECT CASE t%                     ' Window typesπ'                                       ' (you can make as much types,π'                                       '  as you want):π        CASE 1π           a%=218:b%=196:c%=191         '┌───────┐π           h%=179:      :d%=179         '│   1   │π           g%=192:f%=196:e%=217         '└───────┘π        CASE 2π           a%=201:b%=205:c%=187         '╔═══════╗π           h%=186:      :d%=186         '║   2   ║π           g%=200:f%=205:e%=188         '╚═══════╝π        CASE ELSEπ           a%=032:b%= a%:c%= a%         'π           h%= a%:      :d%= a%         ' Blanks onlyπ           g%= a%:f%= a%:e%= a%         'π     END SELECTπ     COLOR ct%,cb%π     LOCATE yb%,xb%π     PRINT CHR$(a%)+REPEAT$(xe%-xb%-1,CHR$(b%))+CHR$(c%);π     FOR i%=yb%+1 TO ye%-1π        LOCATE i%,xb%π        PRINT CHR$(h%)+ SPACE$(xe%-xb%-1) +CHR$(d%);π     NEXTπ     LOCATE ye%,xb%π     PRINT CHR$(g%)+REPEAT$(xe%-xb%-1,CHR$(f%))+CHR$(e%);π     ct%=OldColor% AND 15               ' restore colorsπ     cb%=OldColor%\16π     COLOR ct%,cb%π  END SUBπ'--------------------------------------------------------------------------π  SUB Aprint(x%,y%,st$)π     ox%=POS(0)π     oy%=CSRLINπ     LOCATE y%,x%,0π     PRINT st$;π     LOCATE oy%,ox%,1π  END SUBπ'--------------------------------------------------------------------------πFUNCTION FileExists%(FileName$)π  S$=DIR$(FileName$)π  IF LEN(S$) = 0 THENπ     FileExists% =  0π  ELSEπ     FileExists% = -1π  END IFπEND FUNCTIONπ'--------------------------------------------------------------------------πDouglas H. Lusher              80X28 TEXT MODE                FidoNet QUIK_BAS Echo          03-21-96 (16:01)       QB, PDS                30   895      80X28.BAS   ' > How can I put the screen in 80x28 textmode?ππ DEFINT A-Zπ '$INCLUDE: 'qb.bi'π DIM Reg AS RegTypeππ WIDTH , 43          'this is necessary so that BASIC will notπ                     '   complain if we attempt to use theπ                     '   LOCATE command on a row greater than 25ππ Reg.AX = &H1202                 'set up 400 scan linesπ Reg.BX = &H30π CALL Interrupt(&H10, Reg, Reg)π Reg.AX = &H3                    'set up normal text modeπ CALL Interrupt(&H10, Reg, Reg)π Reg.AX = &H1111                 'load ega character set (8 x 14)π Reg.BX = 0π CALL Interrupt(&H10, Reg, Reg)ππ 'show that we now have 28 linesπ Lines% = 28π FOR Row% = 1 TO Lines%π   LOCATE Row%, 1: PRINT USING "###"; Row%;π NEXTπ SLEEPπ 'you can increase the value of Lines in the above loop,π '   but you will see that only 28 appear on screenππ SCREEN 0: WIDTH 80, 25: CLSπ ENDπEthan Winer                    FAST LINE INPUT REPLACEMENT    FidoNet QUIK_BAS Echo          03-24-96 (01:24)       QB, QBasic, PDS        78   3248     BUFIN.BAS   '> Has anybody else been working with or using the Bufin$ routineπ'> written by Ethan Winer that was posted a few days ago as aπ'> fast substitute for the LINE INPUT command? Has anyoneπ'> else noticed that it returns an extra blank line at the endπ'> of the file unless the final line had no carriage return/lineπ'> feed at the end? Has anyone found a work-around for this bug?π'> Thanks.ππ'No, but I would love to see the code from Bufin$, then maybe I can helpπ'you out...I missed the code the first time around...! :(ππDEFINT A-ZπFUNCTION BufIn$ (FileName$, Done) STATICπ'********* BUFIN.BAS - fast LINE INPUT replacementπ'Copyright (c) 1992 Ethan WinerππIF NOT Reading THEN            'if the first time throughπ  Reading = -1                 'show that we're now readingπ  Done = 0                     'clear Done just in caseπ  CR = 0                       'no return found yet.π  CR$ = CHR$(13)               'define for speed laterππ  FileNum = FREEFILE           'open the fileπ  OPEN FileName$ FOR BINARY AS #FileNumπ  Remaining& = LOF(FileNum)    'byte count to be readππ  BufSize = 4096               'bytes to read each passπ  Buffer$ = SPACE$(BufSize)    'assume BufSize bytesπEND IFππ'---- This is the main outer loop.πDO WHILE Remaining&              'while more in the fileππ  IF CR = 0 THEN                 'if no Return was foundπ    IF Remaining& < BufSize THEN 'read only what remainsπ      BufSize = Remaining&       'resize the bufferπ      IF BufSize < 1 THEN EXIT DO'possible only if EOF 26π      Buffer$ = SPACE$(BufSize)  'create the file bufferπ    END IFπ    GET #FileNum, , Buffer$      'read a blockπ    BufPos = 1                   'start at the beginningπ  END IF                         '  of that blockππ  DO                                 'walk through bufferπ    CR = INSTR(BufPos, Buffer$, CR$) 'look for a Returnπ    IF CR THEN                       'we found oneπ      SaveCR = CR                    'save whereπ      BufIn$ = MID$(Buffer$, BufPos, CR - BufPos)π      BufPos = CR + 2                'skip inevitable LFπ      EXIT FUNCTION                  'all done for nowπ    ELSE                             'back up in the fileπ      '---- If we reached the end of the file and no 13π      '     was found, return what remains in the string.π      IF SEEK(FileNum) >= LOF(FileNum) THENπ        Output$ = MID$(Buffer$, SaveCR + 2)π        '---- Trap a trailing CHR$(26) EOF marker.π        IF RIGHT$(Output$, 1) = CHR$(26) THENπ          Output$ = LEFT$(Output$, LEN(Output$) - 1)π        END IFπ        BufIn$ = Output$             'assign the functionπ        Remaining& = BufSize         'set to fall outπ        EXIT DO                      'and exit nowπ      END IFπ      Slop = BufSize - SaveCR - 1    'calc buffer excessπ      Remaining& = Remaining& + Slop 'calc file excessπ      SEEK #FileNum, SEEK(FileNum) - Slop  'seek to startπ    END IFππ  LOOP WHILE CR                'while more in bufferπ  Remaining& = Remaining& - BufSizeππLOOPππReading = 0                    'we're not reading anymoreπDone = -1                      'show that we're all doneπCLOSE #FileNum                 'final cleanupππEND FUNCTIONπPeter Cooper                   SMOOTH VERTICAL SCROLL         comp.lang.basic.misc           04-08-96 (23:03)       QB, QBasic, PDS        46   965      SCROLLUP.BAS' There may be a small amount of flicker in some speed cases.. if you adjustπ' the delay% loop in 'upwholeline' you can eliminate this.. it is set for myπ' machine at the mo.. mail me  peter@trenham.demon.co.ukπ' DONT EXIT BEFORE ITS FINISHED. your display will look strange , Peco_ππDEF SEG = &HB800ππSCREEN 0πCLSπFOR a% = 1 TO 23π        LOCATE a%π        COLOR a% MOD 15 + 1π        PRINT STRING$(80, CHR$(a% + 64))πNEXT a%ππFOR a% = 1 TO 23π        upwholelineπNEXT a%πDEF SEGπCOLOR 15ππSUB scrollupππ' you should've seen this procedure about 10 mins ago.. it was a whole scrollπ' routine using pokes etc when I realized all I had to do was this!ππLOCATE 24πPRINTππEND SUBππSUB textvert (vpos%)πOUT &H3D4, 8πOUT &H3D5, vpos%πEND SUBππSUB upwholelineπFOR a% = 0 TO 15πWAIT &H3DA, 8πtextvert a%πFOR delay% = 1 TO 8500: NEXT delay%  ' this is 8500 in PDS and 7800 in QBasic for meπNEXT a%πscrollupππtextvert 0πEND SUBπCarl Gorringe                  GET/PUT IN TEXT                FidoNet QUIK_BAS Echo          04-10-96 (11:31)       QB, QBasic, PDS        227  7796     GETPUT.BAS  '>Is it possible to wipe from one screen to another in text mode? (Looks likeπ'>one screen is raised or pulled off to the side revealing  another screenπ'>underneath.)ππ'Following is a program that will allow you to GET any portion of theπ'Text screen into an array, and then PUT it back anywhere on screen. Ifπ'the image goes off the edge, then it is simply clipped, so I believe youπ'can get the effect you are looking for by using them. Enjoy!ππ'--- Carl Gorringe --- <carl.gorringe@rhosoft.com>ππ'----------------------------------π'  GETPUT.BAS - (c) Carl Gorringeπ'----------------------------------π' Released to the public domainπ' You may use this or modify it any way you want, just rememberπ'  to give me credit if you use it in your programs.ππ'---- Must Keep All of the Following! ----ππDECLARE SUB TextGetPutLoad ()πDECLARE SUB TextGetPut (Xlen%, Ylen%, SorcSeg%, SorcOff%, SorcSkip%, DestSeg%, DestOff%, DestSkip%)πDECLARE SUB TextGet (X1%, Y1%, X2%, Y2%, Image%())πDECLARE SUB TextPut (X1%, Y1%, Image%())ππCOMMON SHARED TextGetPutRoutine%()ππDIM SHARED TextGetPutRoutine%(30)πCALL TextGetPutLoadππ'--------- Begin Program ----------ππ' Put Whatever you want here.π' Just remember that the GET/PUT routines ONLY work forπ' SCREEN 0; WIDTH 80,25; and Text Page 0π' You can switch to other modes, just don't call these routines in them.ππENDπ'---------- End Program -----------ππSUB TextGet (X1%, Y1%, X2%, Y2%, Image%())ππ' ::: (c) Carl Gorringe 6/13/93 ::: << v2.1 >>π'--------------------------------------------------------π' This gets the text region from (X1%,Y1%) to (X2%,Y2%)π' and stores it in Image%(). Make sure Image%() is aπ' DYNAMIC array because this SUB will REDIM it.π' Coordinates start at (1,1) for the upper-left corner.π'--------------------------------------------------------ππScrWidth% = 80πScrLength% = 25ππIF X1% < 1 OR X1% > X2% OR Y1% < 1 OR Y1% > Y2% THEN EXIT SUBππNum% = (X2% - X1% + 1) * (Y2% - Y1% + 1) + 1πREDIM Image%(Num%)ππImage%(0) = X2% - X1% + 1πImage%(1) = Y2% - Y1% + 1ππ'<*>--------- Machine Language Varibles ----------<*>πIF X2% > ScrWidth% THENπ    TableSkip% = (X2% - ScrWidth%) * 2π    X2% = ScrWidth%πELSEπ    TableSkip% = 0πEND IFππIF Y2% > ScrLength% THENπ    Y2% = ScrLength%πEND IFππXcount% = X2% - X1% + 1: Ycount% = Y2% - Y1% + 1πScrStart% = (ScrWidth% * (Y1% - 1) + (X1% - 1)) * 2πNextLine% = (ScrWidth% * 2) - (Xcount% * 2)ππPageSegment% = &HB800    '-- Screen 0, Page 0 --πTableSegment% = VARSEG(Image%(0))πTableOffset% = VARPTR(Image%(0)) + 4ππCALL TextGetPut(Xcount%, Ycount%, PageSegment%, ScrStart%, NextLine%, TableSegment%, TableOffset%, TableSkip%)ππEND SUBππSUB TextGetPut (Xlen%, Ylen%, SorcSeg%, SorcOff%, SorcSkip%, DestSeg%, DestOff%, DestSkip%)ππ' ::: (c) Carl Gorringe 6/13/93 ::: << v1.3 >>π'--------------------------------------------------------π' This Should NOT be Used by itself!π' It should ONLY be used within TextGet() and TextPut()!π'--------------------------------------------------------ππIF TextGetPutRoutine%(0) <> &HBB06 THENπ    CALL TextGetPutLoadπEND IFππ'<*>------- Pass Machine Language Arguments -------<*>ππLow% = LBOUND(TextGetPutRoutine%)πDEF SEG = VARSEG(TextGetPutRoutine%(Low%))   '--Set Segment--πP% = VARPTR(TextGetPutRoutine%(Low%))        '--Set Offset--ππPOKE (P% + &H2), ASC(LEFT$(MKI$(SorcSeg%), 1))πPOKE (P% + &H3), ASC(RIGHT$(MKI$(SorcSeg%), 1))ππPOKE (P% + &H5), ASC(LEFT$(MKI$(DestSeg%), 1))πPOKE (P% + &H6), ASC(RIGHT$(MKI$(DestSeg%), 1))ππPOKE (P% + &H8), ASC(LEFT$(MKI$(DestOff%), 1))πPOKE (P% + &H9), ASC(RIGHT$(MKI$(DestOff%), 1))ππPOKE (P% + &HB), ASC(LEFT$(MKI$(SorcOff%), 1))πPOKE (P% + &HC), ASC(RIGHT$(MKI$(SorcOff%), 1))ππPOKE (P% + &HE), ASC(LEFT$(MKI$(Ylen%), 1))πPOKE (P% + &H10), ASC(LEFT$(MKI$(Xlen%), 1))ππPOKE (P% + &H26), ASC(LEFT$(MKI$(SorcSkip%), 1))πPOKE (P% + &H27), ASC(RIGHT$(MKI$(SorcSkip%), 1))ππPOKE (P% + &H2B), ASC(LEFT$(MKI$(DestSkip%), 1))πPOKE (P% + &H2C), ASC(RIGHT$(MKI$(DestSkip%), 1))ππ'<*>--------- Run Machine Language Routine ---------<*>ππCALL ABSOLUTE(P%)ππDEF SEGππEND SUBππSUB TextGetPutLoadππ' ::: (c) Carl Gorringe 6/13/93 ::: << v1.0 >>π'--------------------------------------------------------π' This only needs to be called once in the beginning of theπ' program to store the Assembly language code into theπ' global array TextGetPutRoutine%().π'--------------------------------------------------------ππLow% = LBOUND(TextGetPutRoutine%)πDEF SEG = VARSEG(TextGetPutRoutine%(Low%))   '--Set Segment--πP% = VARPTR(TextGetPutRoutine%(Low%))        '--Set Offset--ππ'<*>------ Start Assembly Language Code ------<*>π'         --- 41 bytes long ---ππPOKE (P% + &H0), &H6                              '  Push ESπPOKE (P% + &H1), &HBB                             '  Mov  BX , ????πPOKE (P% + &H4), &HBA                             '  Mov  DX , ????πPOKE (P% + &H7), &HBF                             '  Mov  DI , ????πPOKE (P% + &HA), &HBE                             '  Mov  SI , ????πPOKE (P% + &HD), &HB5                             '  Mov  CH , ??πPOKE (P% + &HF), &HB1                             '  Mov  CL , ??πPOKE (P% + &H11), &H8E: POKE (P% + &H12), &HC3    '  Mov  ES , BXπPOKE (P% + &H13), &H26                            ' ES:πPOKE (P% + &H14), &H8B: POKE (P% + &H15), &H4     '  Mov  AX ,[SI]πPOKE (P% + &H16), &H8E: POKE (P% + &H17), &HC2    '  Mov  ES , DXπPOKE (P% + &H18), &H26                            ' ES:πPOKE (P% + &H19), &H89: POKE (P% + &H1A), &H5     '  Mov [DI], AXπPOKE (P% + &H1B), &H83: POKE (P% + &H1C), &HC6    '  Add  SI ,+02π    POKE (P% + &H1D), &H2πPOKE (P% + &H1E), &H83: POKE (P% + &H1F), &HC7    '  Add  DI ,+02π    POKE (P% + &H20), &H2πPOKE (P% + &H21), &HFE: POKE (P% + &H22), &HC9    '  Dec  CLπPOKE (P% + &H23), &H75: POKE (P% + &H24), &HEC    '  Jnz  &H11πPOKE (P% + &H25), &HB8                            '  Mov  AX , ????πPOKE (P% + &H28), &H1: POKE (P% + &H29), &HC6     '  Add  SI , AXπPOKE (P% + &H2A), &HB8                            '  Mov  AX , ????πPOKE (P% + &H2D), &H1: POKE (P% + &H2E), &HC7     '  Add  DI , AXπPOKE (P% + &H2F), &HFE: POKE (P% + &H30), &HCD    '  Dec  CHπPOKE (P% + &H31), &H75: POKE (P% + &H32), &HDC    '  Jnz  &HFπPOKE (P% + &H33), &H7                             '  Pop  ESπPOKE (P% + &H34), &HCB                            '  Retfππ'--------------------------------πDEF SEGππEND SUBππSUB TextPut (X1%, Y1%, Image%())ππ' ::: (c) Carl Gorringe 6/13/93 ::: << v2.1 >>π'--------------------------------------------------------π' This puts the image stored in Image%() back to the screenπ' with the upper-left corner of the image at (X1%,Y1%).π' Coordinates start at (1,1) for the upper-left corner ofπ' the screen. If the image goes outside of bounds then itπ' will be automatically clipped.π'--------------------------------------------------------ππScrWidth% = 80πScrLength% = 25ππX2% = Image%(0) - 1 + X1%πY2% = Image%(1) - 1 + Y1%ππIF X1% < 1 OR X1% > X2% OR Y1% < 1 OR Y1% > Y2% THEN EXIT SUBππNum% = (X2% - X1% + 1) * (Y2% - Y1% + 1) + 1ππ'<*>--------- Machine Language Varibles ----------<*>ππIF X2% > ScrWidth% THENπ    TableSkip% = (X2% - ScrWidth%) * 2π    X2% = ScrWidth%πELSEπ    TableSkip% = 0πEND IFππIF Y2% > ScrLength% THENπ    Y2% = ScrLength%πEND IFππXcount% = X2% - X1% + 1: Ycount% = Y2% - Y1% + 1πScrStart% = (ScrWidth% * (Y1% - 1) + (X1% - 1)) * 2πNextLine% = (ScrWidth% * 2) - (Xcount% * 2)ππPageSegment% = &HB800    '-- Screen 0, Page 0 --πTableSegment% = VARSEG(Image%(0))πTableOffset% = VARPTR(Image%(0)) + 4ππCALL TextGetPut(Xcount%, Ycount%, TableSegment%, TableOffset%, TableSkip%, PageSegment%, ScrStart%, NextLine%)ππEND SUBππDouglas H. Lusher              TEXT EDITOR                    FidoNet QUIK_BAS Echo          03-11-96 (01:10)       QB, PDS                1214 35257    EDITOR.BAS  'A few comments are called for, in no particular order:π'1) this text editor works by loading a file into a string arrayπ'and allowing the user to manipulate it there. The limit on fileπ'size, then, is the amount of string memory available. In compiledπ'form, this will be about 57K. Run in the environment, this willπ'be about 40K. I have worked quite hard to prevent "Out of memory"π'errors from crashing the program, but it may not beπ'quite perfect yet. You will note a variable named "MemPad"π'at various places in the code. The program always leaves aπ'small amount of memory free for use by QB's built-in routines.π'I am working on an editor that will handle much larger fileπ'sizes, but that code is still very buggy and I will notπ'inflict my buggy code on the world.ππ'2) when compiled as-is for a stand-alone text editor, it willπ'produce about a 56K file. I am working on eliminating all useπ'of the LINE INPUT command, and when successful, the compiledπ'size should go down about 10K because the floating point emula-π'tion routines will no longer be linked in.ππ'3) please understand that I wrote this editor for my own use.π'I needed something for doing mail, small batch files, etc. Iπ'don't have very much money, so I didn't want to buy something.π'For a while I was using TED, the editor from PC magazine, butπ'I do so much of my work in QB and am so accustomed to the wayπ'the QB editor works that I found using TED to be quite annoying.π'My fingers just naturally wanted to go where they were accustommedπ'to for QB. So finally, fancying myself a moderately competentπ'programmer, I decided to write an editor for myself that workedπ'like QB's. This code is the result. I will listen to suggestionsπ'for improvement, but please understand that I will make onlyπ'such changes as suit *me*. If you want it to work differently,π'you'll have to rework the code to suit yourself. (Bug reports,π'of course, are always welcome.)ππ'4) There are, unfortunately, a dearth of comments, remarks, andπ'explanations in the code. I'm sorry. I have worked for quite aπ'while on this code and it is very familiar to me, so commentsπ'were just getting in my way. And I have done everything possibleπ'to give names to variables and procedures that make clear theirπ'purpose in the code. I fancy the code is quite readable withoutπ'many comments, but then, as I said, I'm very familiar with it,π'so I'm probably not a good judge.ππ'5) The whole trick to doing a text editor is that there are twoπ'things that you must keep track of: the location of the cursorπ'on the screen, and the location of where you are in the file.π'Variables having to do with locations on the screen are givenπ'names that contain "Row" or "Col" depending on whether theyπ'refer to a row or a column on the screen. Variables with namesπ'containing "Ln" or "Line" have to do with the lines in theπ'file (the same as the elements of the string array which containπ'the text). Variables whose names contain "Char" refer toπ'character positions in the lines of the text. CursRow%, CursCol%π'are the current location of the cursor on the screen. ActLn%π'is the line being edited. ActChar% is the character within thatπ'line where editing is taking place. Note that the active lineπ'is copied to a scalar string variable (named ActLn$) for speedπ'and ease of reference. Variable names that containπ'the letters "Ptr" are just generic pointers to lines orπ'characters. Hopefully, this information will help you to followπ'the flow of the code.π'   These variables control how much of the screen the editorπ'covers:π'  TopRow% = 1: BotRow% = 25: LeftCol% = 1: RiteCol% = 80π'these values, of course, make it take the whole screen. Simplyπ'by changing these values you can edit text on only part of theπ'screen if you wish. Note, however, that code assumes thatπ'dialog boxes can be centered in the editing area of the screen.π'If the screen window for editing is made too small, the dialogπ'boxes will be chopped off. So if you want a very small editingπ'area, you will have to rework that part of the code. As written,π'the screen window must be at least 72 columns wide and theπ'total number of screen rows should not be less than 3.π'Oh, and when you shell out to DOS, it automatically takes theπ'whole screen, so changes would have to be made there as well.ππ'6) You can load a file from the command line or from withinπ'the editor. Enter text from the keyboard. The arrow keysπ'move the cursor from line to line or character toπ'character. Home takes the cursor to the begining of theπ'current line, the End key takes it to the end.π'PageUp and PageDn move the cursor the number of lines in theπ'editing window. Control+Home takes you to the beginning of theπ'file, Control+End takes you to the end. To mark a block, holdπ'down a shift key and use the above listed keys to move the cursorπ'as desired. When a block is marked, you can delete it using theπ'delete key, or Shift+delete deletes it and moves it to theπ'clipboard. Text in the clipboard can be inserted anywhere usingπ'Shift+Insert. If a block is marked, it can be printed byπ'pressing Alt+P. A marked block can be saved to a file byπ'pressing Alt+S. When no block is marked, pressing Alt+Sπ'saves the entire file to disk. Pressing Alt+L allows you toπ'load a file into the editor. Alt+F allows you to search forπ'text in the file. Alt+R displays a ruler on the screen that youπ'can move up and down using the arrow keys. Pressing F10 willπ'shell you out to DOS. F1 is the help key, for what it's worth.π'Use Alt+X or Alt+Q to quit. Alt+X assumes you will want toπ'save the file, while Alt+Q gives you the option of exitingπ'without saving the changes you made. I forgot to mentionπ'the Tab key and the Backspace key, they both work. The insertπ'key toggles you between insert mode and overstrike mode. Whenπ'there is a dialog box on screen, you can abort and return toπ'the editor by pressing Escape.ππ'code for a text editor, written completely in QuickBASIC 4.5π'by Douglas H. Lusher, 03-11-1996πDEFINT A-Zπ'$INCLUDE: 'qb.bi'πCONST False = 0, True = NOT FalseπCONST Black = 0, Blue = 1, Brown = 6, Grey = 7πCONST AltF = -33, AltL = -38, AltP = -25, AltQ = -16πCONST AltR = -19, AltS = -31, AltX = -45πCONST ESC = 27, ENTER = 13, BkSpc = 8, TabKey = 9πCONST F1Key = -59, F10Key = -68πCONST InsertKey = -82, DeleteKey = -83πCONST HomeKey = -71, CtrlHome = -119πCONST EndKey = -79, CtrlEnd = -117πCONST PgUpKey = -73, PgDnKey = -81πCONST UpArrow = -72, DnArrow = -80, LArrow = -75, RArrow = -77ππDIM SHARED TopRow%, BotRow%, LeftCol%, RiteCol%πDIM SHARED ScrnRows%, MidRow%, ScrnWidth%πDIM SHARED FirstLn%, LastLn%, MaxLines%, FirstChar%, MaxChars%πDIM SHARED CursRow%, CursCol%, ActLn%, ActChar%πDIM SHARED FG%, BG%, BoxFG%, BoxBG%πDIM SHARED CursSize%, TabLen%, MemPad%, Null$ππTopRow% = 1: BotRow% = 25: LeftCol% = 1: RiteCol% = 80πScrnRows% = (BotRow% - TopRow%) + 1πMidRow% = TopRow% + (ScrnRows% \ 2)πScrnWidth% = (RiteCol% - LeftCol%) + 1ππFirstLn% = 1: LastLn% = 0: MaxLines% = 800πFirstChar% = 1: MaxChars% = 255ππCursRow% = TopRow%: CursCol% = LeftCol%πActLn% = FirstLn%: ActChar% = FirstChar%ππFG% = Grey: BG% = Black: BoxFG% = Grey: BoxBG% = BrownπIF ColorMonitor% THENπ  CursSize% = 12: BG% = BlueπELSEπ  CursSize% = 7πEND IFπTabLen% = 8: Null$ = "": MemPad% = 1024ππDIM Text$(FirstLn% TO MaxLines% + 1)ππ Cmd$ = RTRIM$(COMMAND$)π Ptr% = INSTR(Cmd$, "/L:")π IF Ptr% THENπ   Ptr2% = INSTR(Ptr% + 3, Cmd$, " ")π   IF Ptr2% THENπ    L$ = MID$(Cmd$, Ptr% + 3, Ptr2% - (Ptr% + 3))π    IF LEN(L$) THEN MaxLines% = VAL(L$)π    Cmd$ = MID$(Cmd$, 1, Ptr% - 1) + MID$(Cmd$, Ptr2% + 1)π   ELSEπ    L$ = MID$(Cmd$, Ptr% + 3)π    IF LEN(L$) THEN MaxLines% = VAL(L$)π    Cmd$ = RTRIM$(MID$(Cmd$, 1, Ptr% - 1))π   END IFπ END IFπ File$ = Cmd$π IF INSTR(File$, "*") OR INSTR(File$, "?") THENπ   BEEP: PRINT "No wildcards allowed in file specification": ENDπ END IFππIF LEN(File$) THENπ  IF FileExists(File$) THENπ    File = FREEFILEπ    OPEN File$ FOR INPUT AS Fileπ     IF LOF(File) THENπ       LnPtr% = 0π       DO UNTIL EOF(File)π        LnPtr% = LnPtr% + 1π        IF LnPtr% > MaxLines% THENπ          BEEP: PRINT "File has too many lines"π          CLOSE File: ENDπ        END IFπ        LINE INPUT #File, Text$(LnPtr%)π        CALL Filter(Text$(LnPtr%))π        IF FRE(Null$) < MemPad% THENπ          BEEP: PRINT "Not enough memory"π          CLOSE File: ENDπ        END IFπ       LOOPπ       LastLn% = LnPtr%π     END IFπ    CLOSE Fileπ  ELSEπ    IF NOT LegalFileName(File$) THENπ     BEEP: PRINT "Bad file name": ENDπ    END IFπ  END IFπEND IFππSCREEN 0, 1, 0: WIDTH 80πCOLOR FG%, BG%, BG%: CLSππFileChanged% = FalseπDOπCALL Edit(Text$(), ExitKey%, FileChanged%)πSELECT CASE ExitKey%π  CASE AltSπ    IF FileChanged% THENπ     IF LEN(File$) THENπ       GOSUB SaveFileπ     ELSEπ       GOSUB GetFileNameπ       IF KeyCode% = ENTER THEN GOSUB SaveFileπ     END IFπ    END IFπ  CASE AltQπ    IF FileChanged% THENπ     CALL MsgBox("Save file changes? (Y/N) ", "YyNn", KeyCode%)π     SELECT CASE KeyCode%π       CASE 89, 121                  '"Y", "y"π        IF LEN(File$) THENπ          GOSUB SaveFileπ        ELSEπ          GOSUB GetFileNameπ          IF KeyCode% = ENTER THEN GOSUB SaveFile: EXIT DOπ        END IFπ       CASE 78, 110                  '"N", "n"π        EXIT DOπ       CASE ESCπ        'do nothing to return to edit modeπ     END SELECTπ    ELSEπ     EXIT DOπ    END IFπ  CASE AltXπ    IF FileChanged% THENπ     GOSUB GetFileNameπ     IF KeyCode% = ENTER THEN GOSUB SaveFile: EXIT DOπ    ELSEπ     EXIT DOπ    END IFπEND SELECTπLOOPπCLS : ENDππGetFileName:πDOπ  CALL InputBox("File name: ", File$, KeyCode%)π  IF KeyCode% = ENTER THENπ    IF LegalFileName(File$) THEN EXIT DO ELSE BEEPπ  ELSE 'IF KeyCode% = ESC THENπ    EXIT DOπ  END IFπLOOPπRETURNππSaveFile:πFile = FREEFILEπOPEN File$ FOR OUTPUT AS Fileπ  IF LastLn% > 0 THENπ    FOR LnPtr% = FirstLn% TO LastLn%π     PRINT #File, Text$(LnPtr%)π    NEXTπ  END IFπCLOSE FileπFileChanged% = FalseπRETURNππFUNCTION ColorMonitor%πColorMonitor% = TrueπDEF SEG = 0πIF PEEK(&H463) <> &HD4 THEN ColorMonitor% = FalseπDEF SEGπEND FUNCTIONππSUB DrawBox (TopRow%, NumRows%, LCol%, NumCols%)ππTop$ = STRING$(NumCols%, "═")πMID$(Top$, 1, 2) = " ╔": MID$(Top$, NumCols% - 1, 2) = "╗ "πSide$ = SPACE$(NumCols%)πMID$(Side$, 1, 2) = " ║": MID$(Side$, NumCols% - 1, 2) = "║ "πBot$ = Top$πMID$(Bot$, 2, 1) = "╚": MID$(Bot$, NumCols% - 1, 1) = "╝"ππLOCATE TopRow%, LCol%, 0: PRINT Top$πFOR Row% = 3 TO NumRows%π  LOCATE , LCol%: PRINT Side$πNEXTπLOCATE , LCol%: PRINT Bot$;ππEND SUBππSUB Edit (Text$(), KeyCode%, FileChanged%)π'code for a text editor, written completely in QuickBASIC 4.5π'by Douglas H. Lusher, 03-11-1996ππ'when marking a block involving multiple lines:πBlkStartLn = 0        'is the starting line of the blockπBlkLines = 0          'the number of lines in the block.π                  'If zero, then not in this block marking modeππ'when marking a block of characters within a single line:πBlkStartChar = 0      'this is the starting characterπBlkChars = 0          'the number of characters in the block.π                  'If zero, then not in this block marking modeππRefresh$ = SPACE$(ScrnWidth)       'scratch spaceπInsertMode = TrueπLOCATE , , 0, CursSize - 1, CursSizeπGOSUB RefreshScreenπDOπ  ActLn$ = Text$(ActLn): ActLnLen = LEN(ActLn$)π  LOCATE CursRow, CursCol, 1π  DO WHILE LEN(INKEY$): LOOPπ  DO: Ky$ = INKEY$: LOOP UNTIL LEN(Ky$)π  DEF SEG = 0: ShiftByte = PEEK(&H417): DEF SEGπ  ShiftPressed = ((ShiftByte AND 3) <> 0)π  KeyCode = ASC(Ky$): IF KeyCode = 0 THEN KeyCode = -ASC(MID$(Ky$, 2))π  SELECT CASE KeyCodeπ    CASE 32 TO 255, 1 TO 6, 14 TO 27: GOSUB DoLetterKeyπ    CASE BkSpc: GOSUB DoBackSpaceKeyπ    CASE TabKey: GOSUB DoTabKeyπ    CASE ENTER: GOSUB DoCarriageReturnπ    CASE InsertKey: GOSUB DoInsertKeyπ    CASE DeleteKey: GOSUB DoDeleteKeyπ    CASE UpArrow: GOSUB DoUpArrowπ    CASE DnArrow: GOSUB DoDnArrowπ    CASE PgUpKey: GOSUB DoPgUpKeyπ    CASE PgDnKey: GOSUB DoPgDnKeyπ    CASE LArrow: GOSUB DoLArrowπ    CASE RArrow: GOSUB DoRArrowπ    CASE HomeKey: GOSUB DoHomeKeyπ    CASE EndKey: GOSUB DoEndKeyπ    CASE CtrlHome: GOSUB DoCtrlHomeπ    CASE CtrlEnd: GOSUB DoCtrlEndπ    CASE F1Key: GOSUB DoHelpπ    CASE F10Key: CLS : SHELL: GOSUB RefreshScreenπ    CASE AltF: GOSUB FindTextπ    CASE AltL: GOSUB LoadFileπ    CASE AltP: GOSUB DoPrintπ    CASE AltR: GOSUB DoRulerπ    CASE AltS: IF BlkLines THEN GOSUB SaveLines ELSE EXIT DOπ    CASE AltQ, AltX: EXIT DOπ    CASE ELSE: BEEPπ  END SELECTπLOOPππEXIT SUBππDoCarriageReturn:πIF BlkLines OR BlkChars THEN BEEP: RETURNπIF LastLn = MaxLines THEN BEEP: RETURNπIF ActLn < LastLn THENπ  FOR LnPtr = LastLn TO ActLn + 1 STEP -1π    SWAP Text$(LnPtr), Text$(LnPtr + 1)π  NEXTπ  Text$(ActLn) = LEFT$(ActLn$, ActChar - 1)π  Text$(ActLn + 1) = MID$(ActLn$, ActChar)πEND IFπActLn = ActLn + 1πActChar = FirstCharπIF CursRow <> BotRow THEN CursRow = CursRow + 1πCursCol = LeftColπLastLn = LastLn + 1πGOSUB RefreshScreenπFileChanged = TrueπRETURNππDoTabKey:πIF BlkLines OR BlkChars THEN BEEP: RETURNπIF ActLn > MaxLines THEN BEEP: RETURNπTabChars = TabLen - (ActChar MOD TabLen)πIF ActLnLen + TabChars > MaxChars THEN BEEP: RETURNπIF ActChar - 1 + TabChars > MaxChars THEN BEEP: RETURNπIF ActChar <= ActLnLen THENπ  Text$(ActLn) = LEFT$(ActLn$, ActChar - 1) + SPACE$(TabChars) + MID$(ActLn$, ActChar)πELSEπ  Text$(ActLn) = ActLn$ + SPACE$((ActChar - ActLnLen - 1) + TabChars)πEND IFπActChar = ActChar + TabCharsπIF CursCol + TabChars <= RiteCol THENπ  CursCol = CursCol + TabCharsπ  GOSUB RefreshLineπELSEπ  GOSUB RefreshScreenπEND IFπIF ActLn > LastLn THEN LastLn = ActLnπFileChanged = TrueπRETURNππDoDeleteKey:πIF BlkLines THENπ  IF BlkLines > 0 THENπ    ActLn = BlkStartLnπ    CursRow = Greater(CursRow - BlkLines, TopRow)π  END IFπ  ClipLines = ABS(BlkLines)π  BytesNeeded& = 0π  FOR LnPtr = ActLn TO ActLn + ClipLines - 1π    BytesNeeded& = BytesNeeded& + LEN(Text$(LnPtr)) + 6π  NEXTπ  IF BytesNeeded& + MemPad > FRE(Null$) THEN ClipLines = 0: BEEP: RETURNπ  REDIM ClipBoard$(ClipLines - 1)π  FOR LnPtr = 0 TO ClipLines - 1π    SWAP ClipBoard$(LnPtr), Text$(ActLn + LnPtr)π  NEXTπ  FOR LnPtr = ActLn TO LastLn - ClipLinesπ    SWAP Text$(LnPtr), Text$(LnPtr + ClipLines)π  NEXTπ  BlkLines = 0: ClipChars = 0π  LastLn = LastLn - ClipLinesπ  IF NOT ShiftPressed THEN ClipLines = 0: ERASE ClipBoard$π  GOSUB RefreshScreenπELSEIF BlkChars THENπ  IF BlkChars > 0 THENπ    ActChar = BlkStartCharπ    CursCol = Greater(CursCol - BlkChars, LeftCol)π  END IFπ  ClipChars = ABS(BlkChars)π  ClipBoard$ = MID$(ActLn$, ActChar, ClipChars)π  Text$(ActLn) = LEFT$(ActLn$, ActChar - 1) + MID$(ActLn$, ActChar + ClipChars)π  BlkChars = 0: ClipLines = 0π  IF NOT ShiftPressed THEN ClipChars = 0: ClipBoard$ = Null$π  GOSUB RefreshScreenπELSE 'no blocks markedπ  IF ShiftPressed THEN BEEP: RETURNπ  IF ActChar <= ActLnLen THENπ    Text$(ActLn) = LEFT$(ActLn$, ActChar - 1) + MID$(ActLn$, ActChar + 1)π    GOSUB RefreshLineπ  ELSE 'IF ActChar > ActLnLen THENπ    IF ActLn >= LastLn THEN BEEP: RETURNπ    IF ActChar > MaxChars THEN BEEP: RETURNπ    IF (ActChar - 1) + LEN(Text$(ActLn + 1)) > MaxChars THEN BEEP: RETURNπ    Text$(ActLn) = ActLn$ + SPACE$(ActChar - ActLnLen - 1) + Text$(ActLn + 1)π    Text$(ActLn + 1) = Null$π    FOR LnPtr = ActLn + 1 TO LastLnπ     SWAP Text$(LnPtr), Text$(LnPtr + 1)π    NEXTπ    LastLn = LastLn - 1π    GOSUB RefreshScreenπ  END IFπEND IFπFileChanged = TrueπRETURNππDoInsertKey:πIF ShiftPressed THENπ  IF ClipLines THENπ    IF LastLn + ClipLines > MaxLines THEN BEEP: RETURNπ    BytesNeeded& = 0π    FOR LnPtr = 0 TO ClipLines - 1π     BytesNeeded& = BytesNeeded& + LEN(ClipBoard$(LnPtr))π    NEXTπ    IF BytesNeeded& + MemPad > FRE(Null$) THEN BEEP: RETURNπ    IF ActLn <= LastLn THENπ     FOR LnPtr = LastLn TO ActLn STEP -1π       SWAP Text$(LnPtr), Text$(LnPtr + ClipLines)π     NEXTπ    END IFπ    FOR LnPtr = 0 TO ClipLines - 1π     Text$(ActLn + LnPtr) = ClipBoard$(LnPtr)π    NEXTπ    LastLn = LastLn + ClipLinesπ    GOSUB RefreshScreenπ    FileChanged = Trueπ  ELSEIF ClipChars THENπ    IF ActLn > MaxLines THEN BEEP: RETURNπ    IF ActLnLen + ClipChars > MaxChars THEN BEEP: RETURNπ    IF ActChar + ClipChars - 1 > MaxChars THEN BEEP: RETURNπ    IF ActChar <= ActLnLen THENπ     Text$(ActLn) = LEFT$(ActLn$, ActChar - 1) + ClipBoard$ + MID$(ActLn$, ActChar)π    ELSEπ     Text$(ActLn) = ActLn$ + SPACE$(ActChar - ActLnLen - 1) + ClipBoard$π    END IFπ    IF ActLn > LastLn THEN LastLn = ActLnπ    GOSUB RefreshLineπ    FileChanged = Trueπ  END IFπELSE 'IF NOT ShiftPressed THENπ  InsertMode = NOT InsertModeπ  IF InsertMode THENπ    LOCATE , , , CursSize - 1, CursSizeπ  ELSEπ    LOCATE , , , CursSize \ 2, CursSizeπ  END IFπEND IFπRETURNππDoBackSpaceKey:πIF BlkLines OR BlkChars THEN BEEP: RETURNπIF ActChar = FirstChar THENπ  IF ActLn = FirstLn THEN BEEP: RETURNπ  IF ActLnLen + LEN(Text$(ActLn - 1)) > MaxChars THEN BEEP: RETURNπ  ActChar = LEN(Text$(ActLn - 1)) + 1π  Text$(ActLn - 1) = Text$(ActLn - 1) + ActLn$π  Text$(ActLn) = Null$π  FOR LnPtr = ActLn TO LastLnπ    SWAP Text$(LnPtr), Text$(LnPtr + 1)π  NEXTπ  IF LastLn >= ActLn THEN LastLn = LastLn - 1π  ActLn = ActLn - 1π  IF CursRow <> TopRow THEN CursRow = CursRow - 1π  CursCol = Lesser(ActChar, RiteCol)π  GOSUB RefreshScreenπELSE 'IF ActChar > FirstChar THENπ  IF ActChar <= ActLnLen + 1 THENπ    Text$(ActLn) = LEFT$(ActLn$, ActChar - 2) + MID$(ActLn$, ActChar)π  END IFπ  ActChar = ActChar - 1π  IF CursCol <> LeftCol THENπ    CursCol = CursCol - 1π    GOSUB RefreshLineπ  ELSEπ    GOSUB RefreshScreenπ  END IFπEND IFπFileChanged = TrueπRETURNππDoLetterKey:πIF BlkLines OR BlkChars THEN BEEP: RETURNπIF ActLn > MaxLines THEN BEEP: RETURNπIF ActChar > MaxChars THEN BEEP: RETURNπIF ActChar <= ActLnLen THENπ  IF InsertMode THENπ    IF ActLnLen = MaxChars THEN BEEP: RETURNπ    Text$(ActLn) = LEFT$(ActLn$, ActChar - 1) + " " + MID$(ActLn$, ActChar)π  END IFπ  MID$(Text$(ActLn), ActChar) = Ky$πELSE 'IF ActChar > ActLnLen THENπ  Text$(ActLn) = ActLn$ + SPACE$(ActChar - ActLnLen - 1) + Ky$πEND IFπActChar = ActChar + 1πIF CursCol <> RiteCol THENπ  CursCol = CursCol + 1π  GOSUB RefreshLineπELSEπ  GOSUB RefreshScreenπEND IFπIF ActLn > LastLn THEN LastLn = ActLnπFileChanged = TrueπRETURNππDoUpArrow:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  IF ActLn > FirstLn THEN BlkLines = BlkLines - 1πELSEπ  BlkLines = 0πEND IFπIF ActLn <> FirstLn THENπ  ActLn = ActLn - 1π  IF CursRow <> TopRow THEN CursRow = CursRow - 1πEND IFπGOSUB RefreshScreenπRETURNππDoDnArrow:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  IF ActLn <= LastLn THEN BlkLines = BlkLines + 1πELSEπ  BlkLines = 0πEND IFπIF ActLn <= LastLn THENπ  ActLn = ActLn + 1π  IF CursRow <> BotRow THEN CursRow = CursRow + 1πEND IFπGOSUB RefreshScreenπRETURNππDoPgUpKey:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  BlkLines = Greater(BlkLines - ScrnRows, FirstLn - BlkStartLn)πELSEπ  BlkLines = 0πEND IFπActLn = Greater(ActLn - ScrnRows, FirstLn)πIF ActLn < CursRow THEN CursRow = TopRow + ActLn - 1πGOSUB RefreshScreenπRETURNππDoPgDnKey:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  BlkLines = Lesser(BlkLines + ScrnRows, (LastLn + 1) - BlkStartLn)πELSEπ  BlkLines = 0πEND IFπActLn = Lesser(ActLn + ScrnRows, LastLn + 1)πIF (LastLn + 1) - ActLn < BotRow - CursRow THENπ  CursRow = Lesser(BotRow - ((LastLn + 1) - ActLn), TopRow + LastLn)πEND IFπGOSUB RefreshScreenπRETURNππDoLArrow:πIF ShiftPressed THENπ  IF BlkLines THEN BEEP: RETURNπ  IF BlkChars = 0 THEN BlkStartChar = ActCharπ  BlkChars = Greater(BlkChars - 1, FirstChar - BlkStartChar)πELSEπ  BlkLines = 0: BlkChars = 0πEND IFπIF ActChar <> FirstChar THENπ  ActChar = ActChar - 1π  IF CursCol <> LeftCol THEN CursCol = CursCol - 1πEND IFπGOSUB RefreshScreenπRETURNππDoRArrow:πIF ShiftPressed THENπ  IF BlkLines THEN BEEP: RETURNπ  IF BlkChars = 0 THEN BlkStartChar = ActCharπ  IF ActChar <= MaxChars THEN BlkChars = BlkChars + 1πELSEπ  BlkLines = 0: BlkChars = 0πEND IFπIF ActChar <= MaxChars THENπ  ActChar = ActChar + 1π  IF CursCol <> RiteCol THEN CursCol = CursCol + 1πEND IFπGOSUB RefreshScreenπRETURNππDoHomeKey:πIF ShiftPressed THENπ  IF BlkLines THEN BEEP: RETURNπ  IF BlkChars = 0 THEN BlkStartChar = ActCharπ  BlkChars = FirstChar - BlkStartCharπELSEπ  BlkLines = 0: BlkChars = 0πEND IFπActChar = FirstCharπCursCol = LeftColπGOSUB RefreshScreenπRETURNππDoEndKey:πIF ShiftPressed THENπ  IF BlkLines THEN BEEP: RETURNπ  IF BlkChars = 0 THEN BlkStartChar = ActCharπ  BlkChars = (ActLnLen + 1) - BlkStartCharπELSEπ  BlkLines = 0: BlkChars = 0πEND IFπLeftChar = ActChar - CursCol + 1πActChar = ActLnLen + 1πIF ActChar <= LeftChar THENπ  CursCol = Lesser(ActChar, RiteCol)πELSEπ  CursCol = Lesser(ActChar - LeftChar + 1, RiteCol)πEND IFπGOSUB RefreshScreenπRETURNππDoCtrlHome:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  BlkLines = FirstLn - BlkStartLnπELSEπ  BlkLines = 0πEND IFπActLn = FirstLnπCursRow = TopRowπGOSUB RefreshScreenπRETURNππDoCtrlEnd:πBlkChars = 0πIF ShiftPressed THENπ  IF BlkLines = 0 THEN BlkStartLn = ActLnπ  BlkLines = (LastLn + 1) - BlkStartLnπELSEπ  BlkLines = 0πEND IFπActLn = LastLn + 1πCursRow = Lesser(BotRow, TopRow + LastLn)πGOSUB RefreshScreenπRETURNππRefreshScreen:πLOCATE , , 0πLnPtr = ActLn - (CursRow - TopRow)πCharPtr = ActChar - (CursCol - LeftCol)πIF BlkLines THENπ  StartLn = BlkStartLn: StopLn = BlkStartLn + BlkLinesπ  IF StartLn > StopLn THEN SWAP StartLn, StopLnπ  FOR Row = TopRow TO BotRowπ    LSET Refresh$ = MID$(Text$(LnPtr), CharPtr, ScrnWidth)π    LOCATE Row, LeftColπ    IF LnPtr >= StartLn AND LnPtr < StopLn THENπ     COLOR BG, FG: PRINT Refresh$; : COLOR FG, BGπ    ELSEπ     PRINT Refresh$;π    END IFπ    LnPtr = LnPtr + 1π  NEXTπELSEIF BlkChars THENπ  StartChar = BlkStartChar: StopChar = BlkStartChar + BlkCharsπ  IF StartChar > StopChar THEN SWAP StartChar, StopCharπ  LCol = Greater(StartChar - CharPtr, 0)π  RCol = StopChar - CharPtrπ  FOR Row = TopRow TO BotRowπ    LSET Refresh$ = MID$(Text$(LnPtr), CharPtr, ScrnWidth)π    LOCATE Row, LeftColπ    IF LnPtr = ActLn THENπ     PRINT LEFT$(Refresh$, LCol);π     COLOR BG, FGπ     PRINT MID$(Refresh$, LCol + 1, RCol - LCol);π     COLOR FG, BGπ     PRINT MID$(Refresh$, RCol + 1);π    ELSEπ     PRINT Refresh$;π    END IFπ    LnPtr = LnPtr + 1π  NEXTπELSEπ  FOR Row = TopRow TO BotRowπ    LSET Refresh$ = MID$(Text$(LnPtr), CharPtr, ScrnWidth)π    LOCATE Row, LeftColπ    PRINT Refresh$;π    LnPtr = LnPtr + 1π  NEXTπEND IFπRETURNππRefreshLine:πLSET Refresh$ = MID$(Text$(ActLn), ActChar - CursCol + LeftCol, ScrnWidth)πLOCATE CursRow, LeftCol, 0πIF BlkChars THENπ  StartChar = BlkStartChar: StopChar = BlkStartChar + BlkCharsπ  IF StartChar > StopChar THEN SWAP StartChar, StopCharπ  LCol = Greater(StartChar - CharPtr, 0)π  RCol = StopChar - CharPtrπ  PRINT LEFT$(Refresh$, LCol);π  COLOR BG, FGπ  PRINT MID$(Refresh$, LCol + 1, RCol - LCol);π  COLOR FG, BGπ  PRINT MID$(Refresh$, RCol + 1);πELSEπ  PRINT Refresh$;πEND IFπRETURNππDoHelp:πTemp$ = STR$(ActChar): MID$(Temp$, 1, 1) = ":"πMsg$ = "Cursor" + STR$(ActLn) + Temp$ + " | Bytes free:" + STR$(FRE(Null$))πD = (ScrnWidth - LEN(Msg$)) \ 2 - 4πCOLOR BoxFG, BoxBGπCALL DrawBox(MidRow% - 1, 3, LeftCol + D, LEN(Msg$) + 8)πLOCATE MidRow%, LeftCol + D + 4: PRINT Msg$;πDO UNTIL ASC(INPUT$(1)) = ESC: LOOPπTemp$ = Null$: Msg$ = Null$πCOLOR FG, BGπGOSUB RefreshScreenπRETURNππLoadFile:πIF BlkLines OR BlkChars THEN BEEP: RETURNπIF ActLn > MaxLines THEN BEEP: RETURNπCALL InputBox("File name: ", LoadFile$, KeyCode)πGOSUB RefreshScreenπIF KeyCode <> ENTER THEN RETURNπLoadFile$ = LTRIM$(RTRIM$(LoadFile$))πIF LEN(LoadFile$) = 0 THEN RETURNπIF FileExists(LoadFile$) THENπ  FileLines = FileLineCount(LoadFile$)π  IF FileLines = 0 THEN RETURNπ  IF LastLn + FileLines > MaxLines THENπ    CALL MsgBox("File has too many lines", Null$, KeyCode)π    GOSUB RefreshScreen: RETURNπ  ELSEIF FileSize&(LoadFile$) + MemPad > FRE(Null$) THENπ    CALL MsgBox("Not enough memory", Null$, KeyCode)π    GOSUB RefreshScreen: RETURNπ  END IFπELSEπ  BEEP: CALL MsgBox("File not found", Null$, KeyCode)π  GOSUB RefreshScreen: GOTO LoadFileπEND IFππIF ActLn <= LastLn THENπ  FOR LnPtr = LastLn TO ActLn STEP -1π    SWAP Text$(LnPtr), Text$(LnPtr + FileLines)π  NEXTπEND IFπFile = FREEFILEπOPEN LoadFile$ FOR INPUT AS #Fileπ  FOR LnPtr = ActLn TO ActLn + FileLines - 1π    LINE INPUT #File, FileLn$π    CALL Filter(FileLn$)π    Text$(LnPtr) = FileLn$π  NEXTπ  FileLn$ = Null$πCLOSE FileπLastLn = LastLn + FileLinesπFileChanged = TrueπGOSUB RefreshScreenπRETURNππSaveLines:πCALL InputBox("File name: ", SaveFile$, KeyCode)πGOSUB RefreshScreenπIF KeyCode = ENTER THENπ  SaveFile$ = LTRIM$(RTRIM$(SaveFile$))π  IF LEN(SaveFile$) THENπ    IF FileExists(SaveFile$) THENπ     CALL MsgBox("Specified file already exists: [A]ppend [O]verwrite [C]ancel? ", "AaOoCc", KeyCode)π     GOSUB RefreshScreenπ     SELECT CASE KeyCodeπ       CASE 65, 97: Mode$ = "A": GOSUB DoFileSaveπ       CASE 79, 111: Mode$ = "O": GOSUB DoFileSaveπ       CASE 67, 99, ESC    'do nothing to cancel the saveπ     END SELECTπ    ELSEπ     IF LegalFileName(SaveFile$) THENπ       Mode$ = "O": GOSUB DoFileSaveπ     ELSEπ       CALL MsgBox("Bad file name", Null$, KeyCode)π       GOSUB RefreshScreen: GOTO SaveLinesπ     END IFπ    END IFπ  END IFπEND IFπRETURNππDoFileSave:πFile = FREEFILEπOPEN Mode$, File, SaveFile$π  StartLn = Lesser(ActLn, BlkStartLn)π  FOR LnPtr = StartLn TO StartLn + ABS(BlkLines) - 1π    PRINT #File, Text$(LnPtr)π  NEXTπCLOSE FileπRETURNππFindText:πIF BlkLines THEN BEEP: RETURNπIF BlkChars THENπ  CharPtr = Lesser(BlkStartChar, BlkStartChar + BlkChars)π  Search$ = MID$(ActLn$, CharPtr, ABS(BlkChars))π  GOSUB SearchπELSEπ  CALL InputBox("Find: ", Search$, KeyCode)π  GOSUB RefreshScreenπ  IF KeyCode = ENTER THENπ    IF LEN(Search$) THEN GOSUB Searchπ  END IFπEND IFπRETURNππSearch:πCount = 0πLnPtr = ActLn: CharPtr = ActCharπDOπ  CharPtr = INSTR(CharPtr, Text$(LnPtr), Search$)π  IF CharPtr THENπ    BlkStartChar = CharPtrπ    BlkChars = LEN(Search$)π    ActChar = BlkStartChar + BlkCharsπ    CursCol = Lesser(LeftCol + ActChar - 1, RiteCol)π    TopLn = ActLn - (CursRow - TopRow)π    ActLn = LnPtrπ    CursRow = MidRowπ    IF ActLn >= TopLn AND ActLn < TopLn + ScrnRows THENπ     CursRow = TopRow + (ActLn - TopLn)π    ELSEIF ActLn <= ScrnRows THENπ     CursRow = TopRow + ActLn - 1π    ELSEIF (LastLn + 1) - ActLn < BotRow - CursRow THENπ     CursRow = BotRow - ((LastLn + 1) - ActLn)π    END IFπ    GOSUB RefreshScreen: EXIT DOπ  ELSEπ    Count = Count + 1π    IF Count > LastLn THENπ     CALL MsgBox("Search string not found", Null$, KeyCode)π     GOSUB RefreshScreen: EXIT DOπ    END IFπ    LnPtr = LnPtr + 1: IF LnPtr > LastLn THEN LnPtr = FirstLnπ    CharPtr = 1π  END IFπLOOPπRETURNππDoPrint:πIF BlkLines THENπ  StartLn = Lesser(ActLn, BlkStartLn)π  StopLn = StartLn + ABS(BlkLines) - 1πELSEπ  StartLn = FirstLnπ  StopLn = LastLnπEND IFπFOR LnPtr = StartLn TO StopLnπ  LPRINT Text$(LnPtr)πNEXTπBlkLines = 0πGOSUB RefreshScreenπRETURNππDoRuler:πIF BlkLines OR BlkChars THEN RETURNπRuler$ = SPACE$(MaxChars)πFOR CharPtr = 1 TO MaxCharsπ  MID$(Ruler$, CharPtr, 1) = "┬"π  IF CharPtr MOD 5 = 0 THEN MID$(Ruler$, CharPtr) = "┼"π  IF CharPtr MOD 10 = 0 THENπ    MID$(Ruler$, CharPtr - 1) = CHR$(((CharPtr \ 10) MOD 10) + 48)π  END IFπNEXTπRuler$ = MID$(Ruler$, ActChar - CursCol + LeftCol, ScrnWidth)ππRulerRow = TopRowπDOπ  GOSUB PrintRulerπ  DO WHILE LEN(INKEY$): LOOPπ  DO: Ky$ = INKEY$: LOOP UNTIL LEN(Ky$)π  KeyCode = ASC(Ky$): IF KeyCode = 0 THEN KeyCode = -ASC(MID$(Ky$, 2))πSELECT CASE KeyCodeπ    CASE UpArrowπ     IF RulerRow > TopRow THEN RulerRow = RulerRow - 1π    CASE DnArrowπ     IF RulerRow < BotRow THEN RulerRow = RulerRow + 1π    CASE PgUpKeyπ     IF RulerRow <> TopRow THEN RulerRow = TopRowπ    CASE PgDnKeyπ     IF RulerRow <> BotRow THEN RulerRow = BotRowπ    CASE ESCπ     EXIT DOπ    CASE ELSEπ     BEEPπ  END SELECTπLOOPπRuler$ = Null$πGOSUB RefreshScreenπRETURNππPrintRuler:πGOSUB RefreshScreenπLOCATE RulerRow, LeftCol, 0πCOLOR BG, FG: PRINT Ruler$; : COLOR FG, BGπRETURNππEND SUBππFUNCTION FileExists% (FileName$)πDIM XRegister AS RegTypeXππ'save the current DTAπXRegister.AX = &H2F00πCALL InterruptX(&H21, XRegister, XRegister)πOldDTASeg% = XRegister.ESπOldDTAOff% = XRegister.BXππ'set up a new DTAπDTA$ = SPACE$(43)πXRegister.AX = &H1A00πXRegister.DS = VARSEG(DTA$)πXRegister.DX = SADD(DTA$)πCALL InterruptX(&H21, XRegister, XRegister)ππ'get first matching fileπTemp$ = FileName$ + CHR$(0)πXRegister.AX = &H4E00πXRegister.CX = &H6πXRegister.DS = VARSEG(Temp$)πXRegister.DX = SADD(Temp$)πCALL InterruptX(&H21, XRegister, XRegister)π'if the carry flag is clear then the file existsπFileExists% = ((XRegister.Flags AND 1) = 0)π'restore the old DTAπXRegister.AX = &H1A00πXRegister.DS = OldDTASeg%πXRegister.DX = OldDTAOff%πCALL InterruptX(&H21, XRegister, XRegister)ππEND FUNCTIONππFUNCTION FileLineCount% (FileName$)πlines% = 0πFile = FREEFILEπOPEN FileName$ FOR INPUT AS Fileπ  DO UNTIL EOF(File)π    lines% = lines% + 1π    LINE INPUT #File, FileLine$π  LOOPπCLOSE FileπFileLineCount% = lines%πEND FUNCTIONππFUNCTION FileSize& (FileName$)πFile = FREEFILEπOPEN FileName$ FOR BINARY AS Fileπ  FileSize& = LOF(File)πCLOSE FileπEND FUNCTIONππSUB Filter (Dirty$)ππChar$ = CHR$(7): GOSUB FilterIt       'beepπBadChr$ = CHR$(12): GOSUB FilterIt    'Form feedππBadChr$ = CHR$(9)                     'tabπPtr% = 1πDOπ  Ptr% = INSTR(Ptr%, Dirty$, BadChr$)π  IF Ptr% THENπ    TabChars% = TabLen - (Ptr% MOD TabLen%)π    Dirty$ = MID$(Dirty$, 1, Ptr% - 1) + SPACE$(TabChars%) + MID$(Dirty$, Ptr% + 1)π  ELSEπ    EXIT DOπ  END IFπLOOPπDirty$ = LEFT$(Dirty$, MaxChars%)πEXIT SUBππFilterIt:πPtr% = 1πDOπ  Ptr% = INSTR(Ptr%, Dirty$, Char$)π  IF Ptr% THENπ    MID$(Dirty$, Ptr%, 1) = " "π  ELSEπ    EXIT DOπ  END IFπLOOPπRETURNππEND SUBππFUNCTION Greater% (Var1%, Var2%) STATICπGreater% = Var1%: IF Var2% > Var1% THEN Greater% = Var2%πEND FUNCTIONππSUB InputBox (Prompt$, InputText$, KeyCode%)ππCOLOR BoxFG%, BoxBG%πCALL DrawBox(MidRow% - 1, 3, LeftCol% + 3, ScrnWidth% - 6)πDOπ  LOCATE MidRow%, LeftCol% + 7: PRINT Prompt$;π  CALL InputLine(InputText$, ScrnWidth% - 15 - LEN(Prompt$), KeyCode%)πLOOP UNTIL KeyCode% = ENTER OR KeyCode% = ESCπCOLOR FG%, BG%ππEND SUBππSUB InputLine (Text$, ViewWidth%, KeyCode%)ππMaxLnLen% = 128πLCol% = POS(0): RCol% = LCol% + ViewWidth% - 1πView$ = SPACE$(ViewWidth%)πWork$ = LEFT$(Text$, MaxLnLen%)πLnLen% = LEN(Work$)πCCol% = Lesser(LCol% + LnLen%, RCol%)πAChar% = LnLen% + 1ππLOCATE , , 0, CursSize% - 1, CursSize%πInsert% = TrueπDOπ  LOCATE , LCol%π  LSET View$ = MID$(Work$, AChar% - (CCol% - LCol%), ViewWidth%)π  PRINT View$;π  LOCATE , CCol%, 1π  LnLen% = LEN(Work$)π  DOπ    DO: Ky$ = INKEY$: LOOP UNTIL LEN(Ky$)π    KeyCode% = ASC(Ky$): IF KeyCode% = 0 THEN KeyCode% = -ASC(MID$(Ky$, 2))π  LOOP UNTIL KeyCode% <> BadKey%: BadKey% = 0π  LOCATE , , 0π  SELECT CASE KeyCode%π    CASE BkSpcπ     IF AChar% = 1 THENπ       BEEP: BadKey% = KeyCode%π     ELSEπ       IF AChar% <= LnLen% + 1 THENπ        Work$ = LEFT$(Work$, AChar% - 2) + MID$(Work$, AChar%)π       END IFπ       AChar% = AChar% - 1π       IF CCol% <> LCol% THEN CCol% = CCol% - 1π     END IFπ    CASE ENTERπ     Text$ = Work$π     EXIT DOπ    CASE ESCπ     EXIT DOπ    CASE 32 TO 255      ' letter keysπ     IF AChar% > MaxLnLen% THENπ       BEEP: BadKey% = KeyCode%π     ELSEπ       IF AChar% <= LnLen% THENπ        IF Insert% THENπ          IF LnLen% = MaxLnLen% THENπ            BEEP: BadKey% = KeyCode%π          ELSEπ            Work$ = LEFT$(Work$, AChar% - 1) + Ky$ + MID$(Work$, AChar%)π            AChar% = AChar% + 1π            IF CCol% <> RCol% THEN CCol% = CCol% + 1π          END IFπ        ELSE 'IF NOT Insert% THEN (in overstrike mode)π          MID$(Work$, AChar%, 1) = Ky$π          AChar% = AChar% + 1π          IF CCol% <> RCol% THEN CCol% = CCol% + 1π        END IFπ       ELSE 'IF AChar% > LnLen% THENπ        Work$ = Work$ + SPACE$(AChar% - LnLen% - 1) + Ky$π        AChar% = AChar% + 1π        IF CCol% <> RCol% THEN CCol% = CCol% + 1π       END IFπ     END IFπ    CASE LArrowπ     IF AChar% = 1 THENπ       BEEP: BadKey% = KeyCode%π     ELSE 'IF AChar% > 1 THENπ       AChar% = AChar% - 1π       IF CCol% <> LCol% THEN CCol% = CCol% - 1π     END IFπ    CASE RArrowπ     IF AChar% > MaxLnLen% THENπ       BEEP: BadKey% = KeyCode%π     ELSEπ       AChar% = AChar% + 1π       IF CCol% <> RCol% THEN CCol% = CCol% + 1π     END IFπ    CASE HomeKeyπ     AChar% = 1π     CCol% = LCol%π    CASE EndKeyπ     AChar% = LnLen% + 1π     CCol% = Lesser(LCol% + LnLen%, RCol%)π    CASE InsertKeyπ     Insert% = NOT Insert%π     IF Insert% THENπ       LOCATE , , , CursSize% - 1, CursSize%π     ELSEπ       LOCATE , , , CursSize% \ 2, CursSize%π     END IFπ    CASE DeleteKeyπ     IF AChar% <= LnLen% THENπ       Work$ = LEFT$(Work$, AChar% - 1) + MID$(Work$, AChar% + 1)π     END IFπ    CASE ELSEπ     BEEP: BadKey% = KeyCode%π  END SELECTπ LOOPπ LOCATE , , , CursSize% - 1, CursSize%ππEND SUBππ FUNCTION LegalFileName% (FileName$)π DIM XRegister AS RegTypeXπ LegalFileName% = Falseπ IF FileExists%(FileName$) THENπ  LegalFileName% = Trueπ ELSEπ  'attempt to create the fileπ  Temp$ = FileName$ + CHR$(0)π  XRegister.AX = &H3C00π  XRegister.CX = 0π  XRegister.DS = VARSEG(Temp$)π  XRegister.DX = SADD(Temp$)π  CALL InterruptX(&H21, XRegister, XRegister)π  IF (XRegister.Flags AND 1) = 0 THENπ    'if carry flag is clear, then file was created OKπ    LegalFileName% = Trueπ    'delete the fileπ    XRegister.AX = &H4100π    CALL InterruptX(&H21, XRegister, XRegister)π  END IFπ END IFππ END FUNCTIONππ FUNCTION Lesser% (Var1%, Var2%) STATICπ Lesser% = Var1%: IF Var2% < Var1% THEN Lesser% = Var2%π END FUNCTIONππSUB MsgBox (Msg$, ValidKeys$, KeyCode%)ππ W% = LEN(Msg$) + 8π M% = ScrnWidth% - 6π IF W% > M% THEN W% = M% - 4π D% = (ScrnWidth% - W%) \ 2π COLOR BoxFG%, BoxBG%π CALL DrawBox(MidRow% - 1, 3, LeftCol% + D%, ScrnWidth% - (D% * 2))π LOCATE MidRow%, LeftCol% + D% + 4: PRINT LEFT$(Msg$, W%);π COLOR FG%, BG%ππ DO WHILE LEN(INKEY$): LOOPπ IF LEN(ValidKeys$) THENπ  LOCATE , , 1π  DOπ    DO: VK$ = INKEY$: LOOP UNTIL LEN(VK$)π    IF ASC(VK$) = ESC THEN EXIT DOπ    IF INSTR(ValidKeys$, VK$) THEN EXIT DO ELSE BEEPπ  LOOPπ  LOCATE , , 0π  KeyCode% = ASC(VK$)π ELSEπ  DO UNTIL LEN(INKEY$): LOOPπ END IFπEND SUBππSUB SetVGABorderColor (Colour%)π 'Colour must be in the range 0 - 255π DIM Register AS RegTypeπ Register.AX = &H1001π Register.BX = Colour% * &H100π CALL Interrupt(&H10, Register, Register)πEND SUBππNaushir Patuck                 STRING EDIT/INPUT ROUTINE      naushir@pl.jaring.my           04-21-96 (21:25)       QB, QBasic, PDS        250  6532     INPUT.BAS   'This is a useful string Editing/Input routine I wroteπ'to get rid of the horrors of Input forever :-)ππDECLARE SUB enter (text$, min!, max!, permitted$, caps!, justify!, password!, insert!, cursorvisible!, fillchar$)ππCLSπLOCATE 1, 4πPRINT "Name : [" + STRING$(20, " ") + "]";πLOCATE , 12ππ'Text to be edited.  If left as "", a new string will be createdπtext$ = "Jack"ππ'Minimum number of charactersπmin = 2ππ'Maximum number of charactersπmax = 20ππ'All the characters which areπ'allowed to be enteredπ'NOTE : Space should also be included here (if needed).πpermitted$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "ππ'Set case of text$π'0 = As is enteredπ'1 = All characters changed are upper caseπcaps = 0ππ'Justification of text$π'0 = Noneπ'1 = Left Justifyπ'2 = Right Justifyπjustify = 0ππ'Set password type displayπ'0 = Offπ'1 = Onπpassword = 0ππ'Set insert stateπ'0 = Offπ'1 = Onπ'Note : Insert can be toggled on and off with theπ'       INSERT Key when the subroutine is runningπinsert = 1ππ'Is cursor visible or notπ'0 = Noπ'1 = Yesπcursorvisible = 1ππ'This fills the rest of the string (the empty part)π'with the character provided by fillchar$ during display.π'NOTE : This is just for the display of the string on the screenπ'       and will not actually be added text$πfillchar$ = "∙"ππ'Calling routineπenter text$, min, max, permitted$, caps, justify, password, insert, cursorvisible, fillchar$ππLOCATE 3, 4πPRINT "The Name you entered was '" + text$ + "'"πLOCATE 4, 4πPRINT "Length of string :"; LEN(text$)π                π'Pls send comments/suggestions to :π'Naushir Patuckπ'naushir@pl.jaring.myππSUB enter (text$, min, max, permitted$, caps, justify, password, insert, cursorvisible, fillchar$)ππoldxpos = POS(0)πoldypos = CSRLINπcursorposn = LEN(text$) + 1πended = 0πxpos = oldxposπypos = oldyposππIF caps THEN text$ = UCASE$(text$)ππIF cursorvisible = 1 THENπ  IF insert = 1 THENπ    LOCATE ypos, xpos, 1, 7, 7π  ELSEπ    LOCATE ypos, xpos, 1, 0, 7π  END IFπELSEπ  cursorvisible = 0πEND IFππIF password = 1 THENπ  PRINT STRING$(LEN(text$), 254) + (STRING$(max - LEN(text$), fillchar$))πELSEπ  PRINT text$ + STRING$(max - LEN(text$), fillchar$)πEND IFππxpos = xpos + LEN(text$)πoldtext$ = text$ππDOπ  π  LOCATE ypos, xpos, cursorvisibleπ  π  x$ = ""π  WHILE LEN(x$) = 0π    x$ = INKEY$π  WENDπ  π  SELECT CASE x$π      π    CASE CHR$(27)                                 ' ESC Keyπ      IF oldtext$ <> "" THENπ        text$ = oldtext$π        cursorposn = LEN(text$) + 1π        xpos = oldxpos + LEN(text$)π      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(0) + CHR$(82)                       ' Insert Keyπ      IF cursorvisible THENπ        IF insert = 1 THENπ          LOCATE ypos, xpos, 1, 0, 7π          insert = 0π        ELSEπ          LOCATE ypos, xpos, 1, 7, 7π          insert = 1π        END IFπ      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(0) + CHR$(75)                       ' Left Keyπ      IF (cursorvisible) AND (password <> 1) AND (cursorposn <> 1) THENπ        cursorposn = cursorposn - 1π        xpos = xpos - 1π      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(0) + CHR$(77)                       ' Right Keyπ      IF (cursorvisible) AND (password <> 1) THENπ        IF cursorposn <= LEN(text$) THENπ          cursorposn = cursorposn + 1π          xpos = xpos + 1π        ELSEπ          SOUND 600, 2π        END IFπ      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(8)                                  ' Backspaceπ      IF NOT (cursorposn = 1) THENπ        IF cursorposn <= LEN(text$) THENπ          text$ = LEFT$(text$, cursorposn - 2) + RIGHT$(text$, LEN(text$) - cursorposn + 1)π        ELSEIF cursorposn = (LEN(text$) + 1) THENπ          text$ = LEFT$(text$, LEN(text$) - 1)π        END IFπ        cursorposn = cursorposn - 1π        xpos = xpos - 1π      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(0) + CHR$(83)                       ' Delete Keyπ      IF (password <> 1) AND cursorposn <= LEN(text$) THENπ        text$ = LEFT$(text$, cursorposn - 1) + RIGHT$(text$, LEN(text$) - cursorposn)π      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(13)                                 ' Enter Keyπ      IF (LEN(text$) >= min) THENπ        ended = 1π      ELSEπ        SOUND 600, 2π        ended = 0π      END IFπ      π    CASE CHR$(0) + CHR$(71)                       ' Home Keyπ      IF (cursorvisible) AND (password <> 1) THENπ        cursorposn = 1π        xpos = oldxposπ      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE CHR$(0) + CHR$(79)                       ' End Keyπ      IF (cursorvisible) AND (password <> 1) THENπ        cursorposn = LEN(text$) + 1π        xpos = oldxpos + LEN(text$)π      ELSEπ        SOUND 600, 2π      END IFπ      π    CASE ELSE                                     ' Any Other Keyπ      IF INSTR(permitted$, x$) THENπ        IF (insert) THENπ          IF LEN(text$) <> max THENπ            text$ = LEFT$(text$, cursorposn - 1) + x$ + RIGHT$(text$, LEN(text$) - cursorposn + 1)π            cursorposn = cursorposn + 1π            xpos = xpos + 1π          ELSEπ            SOUND 600, 2π          END IFπ        ELSEπ          IF cursorposn - 1 <> max THENπ            IF cursorposn = LEN(text$) + 1 THENπ              text$ = text$ + x$π            ELSEπ              text$ = LEFT$(text$, cursorposn - 1) + x$ + MID$(text$, cursorposn + 1, LEN(text$) - cursorposn)π            END IFπ            cursorposn = cursorposn + 1π            xpos = xpos + 1π          ELSEπ            SOUND 600, 2π          END IFπ        END IFπ      ELSEπ        SOUND 600, 2π      END IFπ      π  END SELECTπ  π  IF caps THEN text$ = UCASE$(text$)π  π  LOCATE oldypos, oldxposπ  PRINT SPACE$(max)π  π  LOCATE oldypos, oldxpos, cursorvisibleπ  π  IF password = 1 THENπ    PRINT STRING$(LEN(text$), 254) + (STRING$(max - LEN(text$), fillchar$))π  ELSEπ    PRINT text$ + STRING$(max - LEN(text$), fillchar$)π  END IFπ  πLOOP UNTIL endedππIF justify = 2 THEN                               ' Right Justifyπ  text$ = STRING$(max - LEN(text$), " ") + text$πELSEIF justify = 1 THEN                           ' Left Justifyπ  text$ = text$ + (STRING$(max - LEN(text$), " "))πEND IFππLOCATE ypos, xpos, 1, 7, 7ππEND SUBπAlexander Podkolzin            PB EDITOR                      APP@nw.sbank.e-burg.su         04-24-96 (10:58)       PB32                   588  16050    PBEDIT.BAS  'π' Simple Editor. Author: Alexander Podkolzin <APP@nw.sbank.e-burg.su>π' Use it as you want...π' PowerBASIC 3.2+π' I'v deleted all block operations from the Editor, as they wereπ' very ... don't know how to name them (may be "dummy": initial fileπ' was 2 times longer).π' PLEASE, share with me your experience if you'll rewrite this code !π' I'll appreciate any respond of You !π' Thanks for paying attention to that Editor!π'π'----------------------------------------------------------------------π  $LIB ALL OFFπ'----------------------------------------------------------------------π'π  %FALSE=0π  %TRUE=NOT %FALSEπ  %MaxLines= 10000π  %MaxLen= 240π  %FastCur= 8π  %NormAttrib = &H07π  %BlockAttrib= &H17π  %KeyAttrib = &H1Bπ  %PathAttrib = &H0Bπ  %BlnkAttrib = %BlockAttrib +&H80π  %HelpAttrib = &H17π  %HotAttrib = &H15π  %LineAttrib = &H0Aπ'π  DEFINT a-zπ'π  DIM Txt(%MaxLines) AS SHARED STRINGπ  DIM Ins AS SHARED INTEGERπ  DIM nlines AS SHARED INTEGERπ  DIM ScrnSeg AS INTEGERπ'π  IF (pbvScrnCard AND 1) = 0 THENπ    ScrnSeg = &HB800              ' color monitorπ  ELSEπ    ScrnSeg = &HB000              ' mono monitorπ  END IFπ'π  y=CSRLINπ  x=POS(0)π  FileName$=COMMAND$π  IF LEN(FileName$)=0 THENπ     Cprint x,y,"USING: PBEDIT <File Name>",%NormAttribπ     ENDπ  END IFπ'π  IF NOT FileHere(FileName$) thenπ     Cprint x,y,"File not found !",%NormAttribπ     ENDπ  END IFπ'π  InsKey$=CHR$(0,82)π  Esc$=CHR$(27)π  Home$=CHR$(0,71)π  PgUp$=CHR$(0,73)π  PgDn$=CHR$(0,81)π  Up$=CHR$(0,72)π  Down$=CHR$(0,80)π  LeftKey$=CHR$(0,75)π  RightKey$=CHR$(0,77)π  CtrlPgUp$=CHR$(0,132)π  CtrlPgDn$=CHR$(0,118)π  CtrlHome$=CHR$(0,119)π  CtrlEnd$=CHR$(0,117)π  TabKey$=CHR$(9)π  EndKey$=CHR$(0,79)π  AltX$=CHR$(0,45)                ' Quitπ'π  BcSp$ = CHR$(8)π  Enter$=CHR$(13)π  DelKey$=CHR$(0,83)π'π  CtrlB$=CHR$(2)π  CtrlC$=CHR$(3)π  CtrlK$=CHR$(11)π  CtrlL$=CHR$(12)π  CtrlN$=CHR$(14)π  CtrlQ$=CHR$(17)π  CtrlV$=CHR$(22)π  CtrlY$=CHR$(25)π'π  Ins=1π  IsChanged=%FALSEπ'π  xb=1 : yb=1 : xe=80 : ye=24     ' Editor's window coordinatesπ'                                 ' "ye" has to be less then 25!π'π  Cprint 1,ye+1,space$(80),%BlockAttribπ'π  Win 1,xb,yb,xe,ye,7,0π'π  FOR i=yb+1 to ye-1π     Cprint xe,i,CHR$(177),%NormAttribπ  NEXTπ'π  MYXA=1π'π  GOSUB LoadFileπ'π  Cprint 3,ye,"<     :   =   >",%NormAttribπ'π  Cprint xe,yb+MYXA,CHR$(219),%NormAttribπ  DOπ     Numerer nlines,lpage,begy,endyπ     GOSUB PrepareScreenπ     GOSUB ShowPage               ' lpage- length of window (page)π     Show=1                       ' begy - first line to show,π     IF nlines <1 then exit loop  ' endy - last line to show (array)π     WHILE NOT INSTAT: WEND       ' CurY - the cursor lineπ     Simb$=INKEY$π     DEF SEG=0π     POKE &H41C , peek(&H41A)     ' clear keyboard bufferπ     DEF SEGπ     SELECT CASE Simb$π        CASE InsKey$π           Ins = Ins xor 1π           Show=0π        CASE Home$π           CurX=2π           begx=1π        CASE EndKey$π           l=LEN(Txt(LineN))π           CurX=MIN(l+1,wpage)+1π           endx=MAX(l+1,wpage)+1π           begx=endx-wpageπ        CASE Up$π           IF CurY >1 thenπ              decr CurYπ              Show=0π           ELSEπ              IF begy=1 thenπ                 Show=0π              END IFπ              begy=begy-1π              endy=endy-1π              EXIT SELECTπ           END IFπ        CASE Down$π           IF CurY <lpage thenπ              INCR CurYπ              Show=0π           ELSEπ              IF endy=nlines then exit SELECTπ              INCR begyπ              INCR endyπ           END IFπ        CASE PgUp$π           begy=begy-lpageπ           IF begy<=0 then begy=1π        CASE PgDn$π           begy=begy+lpageπ           IF begy>=nlines-lpage+1 THEN begy=nlines-lpage+1π        CASE LeftKey$π           IF CurX >2 thenπ              decr CurXπ              Show=0π           ELSEπ              decr begxπ              IF begx <1 thenπ                 begx=1π                 Show=0π              END IFπ           END IFπ        CASE TabKey$π           IF CurX <79-%FastCur thenπ              INCR CurX,%FastCurπ              Show=0π           ELSEπ              begx=begx+%FastCurπ              IF begx >%MaxLen-79 then begx=%MaxLen-79π           END IFπ        CASE RightKey$π           IF CurX <79 thenπ              INCR CurXπ              Show=0π           ELSEπ              INCR begxπ              IF begx >%MaxLen-79 then begx=%MaxLen-79π           END IFπ        CASE CtrlPgUp$π           begy=1π           CurX=2π           CurY=1π        CASE CtrlPgDn$π           begy=nlines-lpage+1π           CurX=xb+1π           CurY=ye-2π        CASE CtrlHome$π           CurY=1π           Show=0π        CASE CtrlEnd$π           CurY=ye-2π           Show=0π        CASE AltX$,Esc$π           EXIT LOOPπ'π'~~~~~~~~~~~~~~   All other chars will change Txt()   ~~~~~~~~~~~~~~π        CASE Enter$π           IF Ins=1 then          ' IF "Ins" is ONπ              IsChanged=%TRUE         ' Txt() is changedπ              IF nlines=%MaxLines thenπ                 BEEP             ' too many stringsπ                 EXIT SELECTπ              END IFπ              BreakLine LineN,SimbNπ           END IFπ           CurX=2π           IF CurY < lpage thenπ              INCR CurYπ           ELSEπ              INCR begyπ           END IFπ           begx=1π'π        CASE DelKey$π           IsChanged=%TRUEπ           l=LEN(Txt(LineN))π           IF SimbN=1 and l=0 thenπ              IF nlines>1 and LineN<>nlines THENπ                 DelLine LineNπ                 INCR nlinesπ                 CurX=2π              END IFπ           ELSEIF SimbN>l and LineN=nlines THENπ              EXIT SELECTπ           ELSEπ              IF SimbN>l thenπ                 f$=Txt(LineN)+space$(SimbN-l-1)π                 IF len(f$+Txt(LineN+1))>%MaxLen THENπ                    BEEPπ                    EXIT SELECTπ                 END IFπ                 Txt(LineN)=f$+Txt(LineN+1)π                 INCR LineNπ                 DelLine LineNπ              ELSEIF l=1 thenπ                 Txt(LineN)=""π              ELSEπ                 DelChar LineN,SimbNπ              END IFπ           END IFπ'π        CASE BcSp$π           IsChanged=%TRUEπ           IF SimbN=1 AND LineN=1 THEN EXIT SELECTπ           IF SimbN=1 THENπ              IF nlines>1 THENπ                 sa$=Txt(LineN-1)π                 sb$=Txt(LineN)π                 DelLine LineNπ                 Txt(LineN-1)=sa$+sb$π                 CurX=LEN(sa$)+2π                 IF LineN>1 THENπ                    IF endy=<nlines THEN DECR CurYπ                    IF CurY<1 thenπ                       INCR CurYπ                       DECR begyπ                    END IFπ                 END IFπ              END IFπ           ELSEIF SimbN>LEN(Txt(LineN))+1 THENπ              DECR CurXπ           ELSEπ              DECR SimbNπ              DelChar LineN,SimbNπ              DECR CurXπ           END IFπ'π        CASE CtrlY$π           IsChanged=%TRUEπ           DelLine LineNπ           begx=1π           CurX=2π'π        CASE CtrlN$π           IsChanged=%TRUEπ           InsLine LineNπ'π        CASE CtrlK$π           Cprint xb+1,ye+1,"^K",%BlockAttribπ           Cprint xb+4,ye+1,"more...",%BlnkAttribπ           LOCATE ye+1,xb+3π           WHILE NOT INSTAT: wendπ           k$=INKEY$π           Cprint xb+1,ye+1,SPACE$(10),%BlockAttribπ           SELECT CASE k$π'π           END SELECTπ        CASE CtrlQ$π'π        CASE ELSEπ           IF LEN(Simb$)=1 and asc(Simb$)>31 THENπ              IsChanged=%TRUEπ              Txt(LineN)=Txt(LineN)+space$(%MaxLen)π              IF Ins=1 THENπ                 InsChar LineN,SimbN,Simb$π              ELSEπ                 ReplaceChar LineN,SimbN,Simb$π              END IFπ              INCR CurXπ              IF CurX=xe THENπ                 INCR begxπ                 CurX=xe-1π              END IFπ              Txt(LineN)=RTRIM$(Txt(LineN))π           END IFππ'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~π     END SELECTπ  LOOPπ  IF IsChanged THENπ     Win 1,xb+1,yb+1,xe-1,yb+3,7,1π     Cprint xb+3,yb+2,"File is changed, save ? (Y/N) ",%HelpAttribπ     DOπ        WHILE NOT INSTAT: wendπ        s$=INKEY$π        SELECT CASE s$π           CASE "Y","y"π              GOSUB SaveFileπ              EXIT LOOPπ           CASE "N","n"π              EXIT LOOPπ        END SELECTπ     LOOPπ  END IFπ'π' Clear screen before exitπ'π  Cprint 1,1,space$(2000),%NormAttribπ  LOCATE ,,,11,12π  ENDπ'----------------------------------------------------------------------ππShowPage:π  IF Show=0 THEN RETURNπ  FOR i=1 TO lpageπ     n = begy+i-1π     Txt(n)=RTRIM$(Txt(n))π     l = LEN(Txt(n))π     s$=MID$(Txt(n)+space$(%MaxLen - l),begx,wpage)π     Cprint xb+1,yb+i,s$,%NormAttribπ  NEXT iπ  RETURNπ'----------------------------------------------------------------------ππPrepareScreen:π'π' Show Cursor:π'π  LineN=begy+CurY-1π  SimbN=begx+Curx-2π  Cprint 4,ye,RIGHT$("0000"+LTRIM$(STR$(LineN)),5),%PathAttribπ  Cprint 10,ye,RIGHT$("00"+LTRIM$(STR$(SimbN)),3),%PathAttribπ  Cprint 14,ye,RIGHT$("00"+LTRIM$(STR$(SCREEN(CurY+1,CurX ))),3),%PathAttribπ  IF CurX < xb+1 THEN CurX= xb+1π  IF CurX >xe-1 THEN CurX=xe-1π  IF CurY >nlines then CurY=nlinesπ  LOCATE yb+CurY,CurX,1π'π' Make Ruler:π'π  IF Nlines > lpage thenπ     om=MYXAπ     MYXA=((begy+CurY-1)/nlines )*(ye-yb-1)π     IF MYXA=0 then MYXA=1π     IF om <> MYXA thenπ        Cprint xe,yb+om,CHR$(177),%NormAttribπ        Cprint xe,yb+MYXA,CHR$(219),%NormAttribπ     END IFπ  END IFπ'π' Show Keys:π'π  IF Ins=1 THENπ     LOCATE ,,,4,12π     sa$="INS"π  ELSEπ     locate ,,,11,12π     sa$ = "   "π  END IFπ  Cprint 71,ye+1,sa$,%BlockAttribπ'π' Show Size:π'π  Size&=-1π  FOR i=1 to nlinesπ     Size&=Size&+LEN(Txt(i))+2π  NEXTπ  Cprint 35,ye,"<Lines:     >",%NormAttribπ  Cprint 65,ye,"<Size:",%NormAttribπ  Cprint 78,ye,">",%NormAttribπ  Cprint 42,ye,RIGHT$("      "+STR$(nlines),5),%PathAttribπ  Cprint 71,ye,RIGHT$("      "+STR$( Size&),7),%PathAttribπ'π' Check if the editor file is changedπ'π  IF NOT IsChanged THENπ     Cprint 19,ye,"=",%NormAttribπ  ELSEπ     Cprint 19,ye,"÷",%PathAttribπ  END IFπ  RETURNπ'----------------------------------------------------------------------π  FUNCTION FileHere (FileNAME$)π     S$=DIR$(FileNAME$)π     IF LEN(S$)=0 THENπ        FileHere = 0π     ELSEπ        FileHere =-1π     END IFπ  END FUNCTIONπ'----------------------------------------------------------------------π  SUB BreakLine(LineN,SimbN)      ' Separates LineN-th string for twoπ'                                 ' at SimbN-th positionπ     sa$=MID$(Txt(LineN),1,SimbN-1)π     sb$=MID$(Txt(LineN),SimbN,%MaxLen)π     ARRAY INSERT Txt(LineN)π     Txt(LineN)=sa$π     Txt(LineN+1)=sb$π     INCR nlinesπ  END SUBπ'----------------------------------------------------------------------π  SUB DelLine(LineN)              ' Deletes LineN-th lineπ     ARRAY DELETE Txt(LineN)π     DECR nlinesπ  END SUBπ'----------------------------------------------------------------------π  SUB InsLine(LineN)π     BreakLine LineN,LEN(Txt(LineN))+1π  END SUBπ'----------------------------------------------------------------------π  SUB InsChar(LineN,SimbN,Simb$)π     s$=Txt(LineN)π     Txt(LineN)=LEFT$(s$,SimbN-1)+Simb$+RIGHT$(s$,LEN(s$)-SimbN+1)π  END SUBπ'----------------------------------------------------------------------π' Replacement of a charπ  SUB ReplaceChar(LineN,SimbN,Simb$)π     MID$(Txt(LineN),SimbN)=Simb$π  END SUBπ'----------------------------------------------------------------------π  SUB DelChar(LineN,SimbN)π     s$=Txt(LineN)π     Txt(LineN)=LEFT$(s$,SimbN-1) + RIGHT$(s$,LEN(s$)-SimbN)π  END SUBπ'---------------------------------------------------------------------------ππSaveFile:π  IF NOT IsChanged THEN RETURNπ  Cprint 3,ye+1,"Saving...",%BlnkAttribπ  n=INSTR(FileName$,".")π  IF n<>0 THENπ     n$=LEFT$(FileName$,n-1)      'π     e$=".APP"                    ' Extension for changed file.π  ELSE                            'π     n$=FileName$π     e$=".APP"π  END IFπ  IF FileHere(n$+e$) THENπ     KILL n$+e$π  END IFπ  DestFile=FREEFILEπ  OPEN n$+e$ FOR OUTPUT AS DestFileπ  FOR i=1 to nlinesπ     PRINT #DestFile,Txt(i)π  NEXTπ  CLOSE DestFileπ  Cprint 3,ye+1,SPACE$(10),%BlockAttribπ  IsChanged=%FALSEπ  GOSUB PrepareScreenπ  RETURNπ'---------------------------------------------------------------------------ππLoadFile:π  redim Txt(%MaxLines)π  Cprint 3,yb+1,"Loading...",%NormAttrib + &H80π  src=FREEFILEπ  OPEN FileName$ FOR INPUT as srcπ  i=0π  DO WHILE EOF(src )=0 AND i < %MaxLinesπ     INCR iπ     LINE INPUT #src,Txt(i)π' Double load timeπ     REPLACE CHR$(9) with "        " IN Txt(i )π  LOOPπ  Size&= LOF(src )+1π  CLOSE srcπ  nlines=i+1π  Txt(nlines )=""π'π  x=(80- LEN(FileName$)) \ 2π  Cprint x-1,yb,repeat$(LEN(FileName$)+2,CHR$(196)),%NormAttribπ  Cprint x,yb,UCASE$(FileName$),%PathAttribπ  begx=1π  begy=1π  lpage=ye-yb-1π  wpage=xe-xb-1π  endy=MIN(lpage,nlines )π  CurY=1π  CurX=2π  SimbN=1π  Show=1π  LOCATE yb+1,xb+1π  RETURNπ'---------------------------------------------------------------------------π' "Numerer" normalizes begy% and begx%π  SUB Numerer(nlines%,lpage%,begy%,endy%)π     IF nlines%<=lpage% THENπ        begy%=1π        endy%=nlines%π        EXIT SUBπ     END IFπ     IF begy%<1 THENπ        begy%=1π        endy%=begy%+lpage%-1π        EXIT SUBπ     END IFπ     IF begy%+lpage%-1>=nlines% THENπ        endy%=nlines%π        begy%=nlines%-lpage%+1π        EXIT SUBπ     END IFπ     endy%=begy%+lpage%-1π  END SUBπ'----------------------------------------------------------------------------π  SUB Win(t%,xb%,yb%,xe%,ye%,ct%,cb%)π'π     OldColor% = pbvScrnTxtAttr   ' Internal PB variableπ'π     SELECT CASE t%               ' Window typesπ'                                 ' (you can make as much types,π'                                 ' as you want):π        CASE 1π           a%=218:b%=196:c%=191   ' Single frameπ           h%=179:      :d%=179π           g%=192:f%=196:e%=217π        CASE 2π           a%=201:b%=205:c%=187   ' Double frameπ           h%=186:      :d%=186π           g%=200:f%=205:e%=188π        CASE ELSEπ           a%=032:b%= a%:c%=a%    ' Blanks onlyπ           h%= a%:      :d%=a%π           g%= a%:f%= a%:e%=a%π     END SELECTπ'π     COLOR ct%,cb%π'π     LOCATE yb%,xb%π     PRINT CHR$(a%)+REPEAT$(xe%-xb%-1,CHR$(b%))+CHR$(c%);π'π     FOR i%=yb%+1 TO ye%-1π        LOCATE i%,xb%π        PRINT CHR$(h%) + SPACE$(xe%-xb%-1) +CHR$(d%);π     NEXTπ'π     LOCATE ye%,xb%π     PRINT CHR$(g%)+REPEAT$(xe%-xb%-1,CHR$(f%))+CHR$(e%);π'π     ct%=OldColor% AND 15         ' restore colorsπ     cb%=OldColor% \ 16π     COLOR ct%,cb%π  END SUBπ'----------------------------------------------------------------------------π  SUB PutAttribute(x%,y%,t%,b%)   ' Puts attribute byte to video memoryπ     LOCAL c%                     ' directly to Colomn, Row positionπ     c% = b%*16+t%π     DEF SEG = ScrnSegπ     POKE 160*(y%-1)+x%+x%-1,c%π     DEF SEGπ  END SUBπ'----------------------------------------------------------------------------π  SUB Cprint(x%,y%,s$,attr%)      ' Color printingπ     LOCATE ,,0                   ' For more speed better to useπ     REG 1,&H1300                 ' ASSEMBLER subroutineπ     REG 2,attr%π     REG 3,LEN(s$)π     REG 4,(y%-1)*256+x%-1π     REG 9,STRSEG(s$)π     REG 7,STRPTR(s$)π     CALL INTERRUPT &H10π     LOCATE ,,1π  END SUBπ'----------------------------------------------------------------------π 1         78   ARABIC TO ROMAN NUMERALS       Jeff S. Root                    2393      459  MATH TEST                      Dave Gjessing                   17934     93   BUBBLE SORT                    Dave Gjessing                   21337     175  EXPRESSION EVALUATOR           Christopher Pinder              25827     90   EXTRACT/SET LOW & HIGH BYTES   Larry Stone                     1         87   MONITOR SHELL & GET ERRORLEVEL Tony Elliott                    1         815  POSTIT! 5.0 FOR VB/DOS         Brent Ashley                    1         234  CLOCK SET                      Douglas Lusher                  7034      729  CALCULATE DAY OF WEEK          Steve M. Wiegand                1         194  RAD VGA/ANSI DEMO              Andrew Jones                    12800     73   GAME OF LIFE ALGORITHM         Aaron Scott Zabudsky            18103     70   SILLY GAME                     Andrew Jones                    19874     83   LINE & CIRCLE REPLACEMENTS     Justin Pasher                   1         75   LIST OF DRIVES                 Larry Stone                     1         173  DETECT COMPUTER PROCESSOR UNIT Thomas Gohel                    4950      190  PATH CHECK                     Jim Emptage                     9650      35   DETECT IF SHARE IS LOADED      Robert Fortune                  11591     18   ERRORLEVEL OF RETURNED SHELL   Geoffrey Liu                    12444     13   EXITING WITH ERRORLEVEL        Joey Shaw                       12942     107  CHECK IF IN A SHELL            Tony Elliott                    1         338  ROTATING DNA ANALYSIS          Sean Smith                      8988      140  BLOCK FILL                     David J. Arigan                 13245     168  ANOTHER PAINT REPLACEMENT      Rich Gordley                    16482     25   LINE BOUNCER                   Isaac Grover                    17734     72   WRITE 640X480X16 .BMP FILES    Mathew Robertson                20661     35   GRAVITY LINES                  Stephan Doughty                 23128     83   BOUNCING LINES IN 3D BOX       Stephan Doughty                 28181     90   FLYING BEES & WASP             Richard Dale                    1         26   VGA/SVGA INTERRUPTS            Mike Huff                       1320      2114 I/O PORT ADDRESSES             Wim Osterholt                   78297     109  HEXADECIMAL AND BINARY NOTATIONEarl L. Montgomery              1         1051 CHRISTMAS HAK-MAN              Nicolas Culberson               30619     808  FIRE STORM                     Tim Desper                      50999     237  JACK'S GAME                    Jacques Mallah                  63996     160  COMBAT GAME                    Jacques Mallah                  71994     308  SPHERE FIGHTER                 Mike Hulme & Co.                91960     2096 BALLOON X                      Manny Najera                    156135    376  THE ADVENTURE                  Chris Kerton                    172335    321  AZTEC TOMB PART I              A. R. Crowther                  193400    84   GENERIC HORSE RACING GAME      Eric Benoit                     195402    370  THE BIOTECH INSTITUTE          David Carlton                   220103    240  DUNGEON RPG GAME               Jonathan Hopkinson              235793    185  SPACE DUEL                     Jonathan Hopkinson              248054    326  TIC-TAC-TOE VIA MODEM          Kevin Fowlks                    256137    68   SPACE INVADERS                 Alan Bruzzi                     259153    268  BOX-CAR RACES                  Justin Pasher                   265349    191  LUNAR LANDER                   Chris Sequeria                  277974    82   MISSILE                        Kenneth Green                   281322    66   TANK!!!                        Kenneth Green                   285703    272  TRY - LIKE TETRIS              Mike Hulme                      298599    903  IMMORTAL KOMBAT II             John Diamond                    316925    139  (SONIC) SPINBALL               Eric Carr                       326171    53   SPINBALL GAME UPDATE           Eric Carr                       329821    177  TETRIS (TEXT MODE)             Joshua Dickerson                1         93   320X400 SCREEN MODE            Earl L. Montgomery              3481      84   SCROLLING OVER VGA-BIOS        Thomas Gohel                    5826      215  PAC-MAN SCREEN SAVER           Chad Beck                       11354     341  VESA SVGA SCREEN ROUTINES      Tyler Barnes                    23621     108  QBASIC FADING ROUTINE          Manny Najera                    26209     429  3D-VR MAZE WARS                David Carlton                   38760     62   STARFIELD WITH BACKGROUND MUSICTyler Barnes                    41102     45   SCALE SPRITE                   Eric Carr                       42934     164  3D MATRIX ROTATIONS            Peder Brynolf                   46087     151  2D ROTATING TEXTURE MAPS       Peder Brynolf                   48540     25   COLOR BARS THAT COLOR CYCLE    Aaron Scott Zabudsky            49098     14   COMPUTERIZED SPIROGRAPH        Aaron Scott Zabudsky            49599     29   REVERSING SCREEN IMAGE         Earl L. Montgomery              50477     58   BACK SWITCHING                 Earl L. Montgomery              51978     30   TGA VIEWER (320X200)           Jeff Lawson                     52752     37   ANIMATION OF RUNNING MAN       Dave Shea                       55244     136  COLORFUL WORMHOLE              Unknown Author(s)               64231     694  GRAPHICS DRAWING PROGRAM       Einar Tveit                     76968     63   BOUNCING WORM                  Andrew Jones                    78607     62   BOX ENLARGES AS BALL BOUNCES   Andrew Jones                    80057     26   SNOWY RAIN                     Andrew Jones                    80725     1238 MOUSE PAINT PROGRAM            Unknown Author(s)               112000    306  TILE GRAPHICS                  James Tonn                      125735    52   SMALL FONT (8X8 SANS SERIF)    Michael J. Kelly                129243    135  VESA MANDELBROT                Earl L. Montgomery              133543    124  SPRITE(BITMAP) EDITOR          Joshua Dickerson                1         88   MONITOR INTERRUPTS             Tyler Barnes                    1         70   SIMULTANEOUS KEY DEMO          Eric Carr                       3107      119  DETECT KEYDOWN & KEYUP EVENTS  Eric Benson                     6692      36   LEFT/RIGHT SHIFT (USING BITS)  Jeremy Stanley                  1         556  MEMORY VIEW                    Tyler Barnes                    1         166  SIMPLE QWK READER              The ABC Programmer              5089      144  CREATE WORD SEARCH PUZZLES     Justin McCall                   14658     292  DUMP OUTBOUND.HIS TO TEXT FILE Justin Pasher                   24279     200  LED CLOCK DISPLAY              Douglas H. Lusher               29848     1067 INSTALLATION UTILITY           Ethan Winer                     68481     494  ADVANCED QWK READER            The ABC Programmer              83432     64   TYPING DRILL                   Andrew Jones                    1         110  COM SUPPORT                    Michael Parker                  3384      192  DIAL A PHONE NUMBER            Dick Dennison                   1         474  MOUSE DEMO                     Hardin Brothers                 12676     402  GRAPHICAL MOUSE USAGE          John Rodgers                    23028     361  GRAPHICAL MOUSE CURSORS DEMO   Brian Roche                     35763     69   PSYCHADELIC ELVIS MOUSEBOY     Dave Shea                       38416     46   ANIMATED MOUSE CURSOR          Dave Shea                       41384     394  LALEH'S MOUSE ROUTINES V2.0    Jamshid Khoshrangi              67253     218  PB MOUSE TIC-TAC-TOE DEMO      The ABC Programmer              74614     18   HAND MOUSE POINTER BITMAP      Mike Wegner                     1         231  NOVELL NETWARE ROUTINES        Greg Shultz/Dave Navarro, Jr.   6987      40   RETURNS DESQVIEW VERSION       Dave Navarro, Jr.               1         215  ANSI VIEWER                    Dave Navarro, Jr.               5064      138  PERCENTAGE BAR ROUTINE         James Goldbloom                 11593     94   SWAP ARRAYS IN PB              Dave Navarro, Jr.               1         28   MIDI CODE FOR THE SBSIM        Mike Huff                       1136      107  PB .WAV PLAYER                 Dave Navarro, Jr.               4951      377  BACKGROUND WAV/VOC PLAY/RECORD Mike Huff                       14908     88   SOUND BLASTER OSCILLISCOPE     Andrew Jones                    16604     131  SOUND AFFECTS                  Daniel Minty                    1         267  SIMPLE FILE BROWSER            Alexander Podkolzin             7362      30   80X28 TEXT MODE                Douglas H. Lusher               8392      78   FAST LINE INPUT REPLACEMENT    Ethan Winer                     11727     46   SMOOTH VERTICAL SCROLL         Peter Cooper                    12811     227  GET/PUT IN TEXT                Carl Gorringe                   20545     1214 TEXT EDITOR                    Douglas H. Lusher               54753     250  STRING EDIT/INPUT ROUTINE      Naushir Patuck                  61200     588  PB EDITOR                      Alexander Podkolzin